"First-class function" is a term that can be applied in computer programming and computer science to a computer programming language if its treatment of functions adheres to a set of guidelines, although the full scope and depth of these guidelines is not formally agreed upon. To have a first-class function computer programming language, the main feature that must be supported is the ability to pass functions as arguments to other functions. A function also must be able to be assigned to a variable so it can be stored. Other properties used to determine what constitutes a first-class function include the ability to dynamically generate a function at runtime and the capability of the language to have a function as a return value of another function. Languages that support first-class function architecture allow for a high level of abstraction and also, in some instances, provide a mechanism for run-time dynamic code generation.
When the term "function" is used in a loosely defined sense, the concept of passing a function within a program through variables is not necessarily unique to languages that natively implement first-class function support. The ability to pass blocks of code to functions, or to return non-dynamic code from a function, can easily be done in many programming languages through different mechanisms. One of the strict parts of the definition of a first-class function language, however, is that the handling of functions as variables must be done natively, without the use of metadata such as conditional defines and without calling a compiler to recompile a piece of code. The term "function" also is used to refer to independent code blocks that are called on their own, meaning they do not include the code blocks known as methods in object oriented programming languages or the blocks sometimes called procedures in other languages.
When a language is designed to allow first-class function code, some design patterns can be implemented more directly than in other languages. A function can receive a function as a variable, and then construct a new function and return the new function to the calling code, so this creates a mechanism for the run-time creation of program code. This also can make the use of real-time user-inputted functions possible within the language without the use of processes such as reflection or evaluation.
Some of the most basic uses for first-class function architecture include creating generic functions that can easily be reused and implementing recursive mathematical algorithms that are able to self-modify their equations as they progress. One similar, more advanced use for first-class mechanisms is the implementation of polymorphism in languages in which it is not specifically implemented. This can allow functions to be called with the same function signature but execute code based on the context in which it was called, sometimes by passing a key function to the polymorphic function.