Il existe une différence. Quand vous dites qu'un langage a des fonctions de première classe, cela signifie que le langage traite les fonctions comme des valeurs - que vous pouvez affecter une fonction à une variable, la transmettre, etc. Les fonctions d'ordre supérieur sont des fonctions qui fonctionnent sur d'autres fonctions, c'est-à-dire qu'ils prennent une ou plusieurs fonctions comme argument et peuvent également renvoyer une fonction.
Le concept «d'ordre supérieur» peut être appliqué aux fonctions en général, comme les fonctions au sens mathématique. Le concept de «première classe» ne concerne que les fonctions des langages de programmation. Il est rarement utilisé pour désigner une fonction, comme «une fonction de première classe». Il est beaucoup plus courant de dire qu '«un langage a / n'a pas un support fonctionnel de première classe».
Les deux choses sont étroitement liées, car il est difficile d'imaginer un langage avec des fonctions de première classe qui ne prendrait pas également en charge les fonctions d'ordre supérieur, et inversement un langage avec des fonctions d'ordre supérieur mais sans support de fonctions de premier ordre.
int
ouchar
, dans le sens où elles ne peuvent pas être explicitement définies (par un corps de fonction) où vous le souhaitez.Les fonctions de première classe sont des fonctions traitées comme un objet (ou assignables à une variable).
Les fonctions d'ordre supérieur sont des fonctions qui prennent au moins une fonction de première classe comme paramètre ou qui renvoient au moins une fonction de première classe.
la source
Ils sont différents.
Fonctions de première classe
Les valeurs dans une langue qui sont gérées de manière uniforme partout sont appelées «première classe». Ils peuvent être stockés dans des structures de données, passés comme arguments ou utilisés dans des structures de contrôle.
Les langages qui prennent en charge des valeurs avec des types de fonction et les traitent de la même manière que des valeurs non fonctionnelles peuvent être considérés comme ayant des «fonctions de première classe».
Fonctions d'ordre supérieur
L'une des conséquences d'avoir des fonctions de première classe est que vous devriez pouvoir passer une fonction comme argument à une autre fonction. Cette dernière fonction est désormais «d'ordre supérieur». C'est une fonction qui prend une fonction comme argument.
L'exemple canonique est "carte"
Autrement dit, il prend une fonction et un tableau et retourne un nouveau tableau avec la fonction appliquée à chaque élément.
Les langages fonctionnels - langages où les fonctions sont le principal moyen de créer des programmes - ont tous des fonctions de première classe. La plupart ont également des fonctions d'ordre supérieur (de très rares exceptions étant des langages comme Excel, qui peuvent être considérés comme fonctionnels, mais pas d'ordre supérieur).
la source
En plus des réponses précédentes, notez qu'un langage avec des fonctions de première classe active automatiquement l'expression de fonctions d'ordre supérieur (car vous pouvez passer des fonctions comme paramètres comme toute autre valeur).
D'un autre côté, vous pouvez imaginer des langages qui prennent en charge des fonctions d'ordre supérieur, mais ne font pas de fonctions de première classe (et où les paramètres qui sont des fonctions sont traités spécialement, et différents des paramètres de valeur "ordinaires").
Ainsi, la présence de fonctions de première classe (en tant que caractéristique du langage) implique la présence de fonctions d'ordre supérieur, mais pas l'inverse.
la source
Les fonctions de première classe peuvent:
La fonction d'ordre élevé est une fonction qui renvoie une autre fonction.
Par exemple:
la source
Les fonctions de première classe signifient tout ce que vous pouvez faire avec d'autres types (variables, booléens, nombres ...), vous pouvez le faire avec des fonctions.
Par exemple, assignez-les à des variables, transmettez-les, créez-les à la volée.
la source