Qu'est-ce qu'une fonction de première classe?
"Fonction de premier ordre" est un terme qui peut être appliqué en langage informatique à un langage de programmation si son traitement des fonctions est conforme à un ensemble de lignes directrices, bien que la portée et la profondeur de ces lignes directrices ne soient pas formellement convenues. . Pour disposer d'un langage de programmation informatique de première classe, la fonctionnalité principale à prendre en charge est la possibilité de passer des fonctions en tant qu'arguments à d'autres fonctions. Une fonction doit également pouvoir être affectée à une variable pour pouvoir être stockée. D'autres propriétés utilisées pour déterminer ce qui constitue une fonction de première classe incluent la capacité de générer dynamiquement une fonction au moment de l'exécution et la capacité du langage à avoir une fonction comme valeur de retour d'une autre fonction. Les langages qui prennent en charge une architecture de fonction de premier ordre permettent un niveau d'abstraction élevé et fournissent également, dans certains cas, un mécanisme pour la génération de code dynamique au moment de l'exécution.
Lorsque le terme "fonction" est utilisé dans un sens vague, le concept de passage d'une fonction dans un programme à l'aide de variables n'est pas nécessairement propre aux langages qui implémentent de manière native un support de fonction de première classe. La possibilité de passer des blocs de code à des fonctions ou de renvoyer du code non dynamique à partir d'une fonction peut facilement être réalisée dans de nombreux langages de programmation via différents mécanismes. L’un des aspects stricts de la définition d’un langage de fonction de premier ordre réside toutefois dans le fait que le traitement des fonctions en tant que variables doit être effectué de manière native, sans utilisation de métadonnées telles que les définitions conditionnelles ni l’appel d’un compilateur pour recompiler une partie du fichier. code. Le terme "fonction" est également utilisé pour désigner des blocs de code indépendants qui sont appelés seuls, ce qui signifie qu'ils n'incluent pas les blocs de code appelés méthodes dans les langages de programmation orientés objet ou les blocs parfois appelés procédures dans d'autres langages.
Lorsqu'un langage est conçu pour permettre un code de fonction de première classe, certains modèles de conception peuvent être implémentés plus directement que dans d'autres langages. Une fonction peut recevoir une fonction en tant que variable, puis créer une nouvelle fonction et la renvoyer au code appelant, ce qui crée un mécanisme pour la création à l'exécution du code de programme. Cela peut également permettre l'utilisation de fonctions en temps réel saisies par l'utilisateur dans le langage sans recourir à des processus tels que la réflexion ou l'évaluation.
Parmi les utilisations les plus élémentaires d'une architecture de fonctions de premier ordre, citons la création de fonctions génériques pouvant être facilement réutilisées et la mise en œuvre d'algorithmes mathématiques récursifs capables de modifier eux-mêmes leurs équations à mesure de leur progression. Une utilisation similaire, mais plus avancée, de mécanismes de première classe est la mise en œuvre du polymorphisme dans des langages dans lesquels il n'est pas implémenté spécifiquement. Cela peut permettre aux fonctions d'être appelées avec la même signature mais d'exécuter du code en fonction du contexte dans lequel elles ont été appelées, parfois en transmettant une fonction clé à la fonction polymorphe.