"Première classe de fonction" est un terme qui peut être appliquée à la programmation informatique et en informatique à un langage de programmation informatique si son traitement des fonctions adhère à un ensemble de lignes directrices, bien que la portée et la profondeur de ces lignes directrices n'est pas formellement convenu. Pour avoir une langue de première classe de fonction de programmation informatique, la principale caractéristique qui doit être pris en charge est la possibilité de passer des fonctions comme arguments à d'autres fonctions. Une fonction aussi doit pouvoir être affectée à une variable de sorte qu'il peut être stocké. Autres propriétés utilisées pour déterminer ce qui constitue une fonction de première classe comprennent la capacité de générer dynamiquement une fonction lors de l'exécution et de la capacité du langage à une fonction comme valeur de retour d'une autre fonction. Langues qui soutiennent l'architecture fonction de première classe permettre un niveau d'abstraction élevé et aussi, dans certains cas, fournir un mécanisme pour l'exécution de génération de code dynamique.
Lorsque le terme «fonction» est utilisé dans un sens vaguement défini, le concept de passer d'une fonction à l'intérieur d'un programme à travers des variables n'est pas nécessairement unique pour les langues qui implémentent le support en natif la fonction de première classe. La possibilité de passer des blocs de code pour les fonctions, ou pour retourner non dynamique de code d'une fonction, peut facilement être faite dans de nombreux langages de programmation par différents mécanismes. Une des parties les stricts de la définition d'un langage de la fonction de première classe, cependant, est que le traitement des fonctions en tant que variables doit être fait de façon native, sans l'utilisation de métadonnées telles que le conditionnel définit et sans faire appel à un compilateur de recompiler un morceau de code. Le terme «fonction» est également utilisé pour désigner les blocs de code indépendants qui sont appelés par leurs propres moyens, ce qui signifie qu'ils ne comprennent pas les blocs de code connues comme méthodes de langages de programmation orientés objet ou les blocs parfois appelées procédures dans d'autres langues.
Quand une langue est conçue pour permettre à un code de fonction de première classe, quelques modèles de conception peut être mise en œuvre plus directement que dans d'autres langues. Une fonction peut recevoir une fonction d'une variable, puis construire une fonction nouvelle et la nouvelle fonction retourne le code d'appel, si cela crée un mécanisme de création d'exécution de code de programme. Ceci peut également rendre l'utilisation en temps réel de l'utilisateur saisies fonctions possibles dans la langue sans l'utilisation de procédés tels que la réflexion ou de l'évaluation.
Certaines des utilisations les plus élémentaires de l'architecture fonction de première classe comprennent la création de fonctions génériques qui peuvent facilement être réutilisés et la mise en œuvre récursive des algorithmes mathématiques qui sont capables de s'auto-modifier leurs équations à mesure qu'ils progressent. Une semblable, une utilisation plus avancée pour la qualité de la mise en œuvre des mécanismes est du polymorphisme dans les langues dans lesquelles il n'est pas spécifiquement mises en œuvre. Ceci peut permettre de fonctions à appeler à la signature même fonction, mais d'exécuter du code sur la base du contexte dans lequel il a été appelé, parfois en passant une touche de fonction pour la fonction polymorphe.