web-dev-qa-db-fra.com

Toute différence entre la fonction de première classe et la fonction d'ordre élevé

Je me demande si/quelle différence entre Fonction de première classe et Fonction d'ordre supérieur .

J'ai lu ces deux pages du wiki et elles ont l'air assez similaires . S'ils parlent de la même chose, pourquoi avoir besoin de deux terminologies?

J'ai essayé de google mais je n'ai trouvé aucune chose utile.

111
Simon

Il y a 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: vous pouvez affecter une fonction à une variable, la transmettre, etc. Les fonctions d'ordre supérieur sont des fonctions qui fonctionnent avec d'autres fonctions, ce qui signifie qu'ils prennent une ou plusieurs fonctions en 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 faire référence à une fonction, telle que «une fonction de première classe». Il est beaucoup plus courant de dire qu ’« une langue a/n’a pas un support de fonction 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 prendraient 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 fonction de première classe.

131
zoul

Fonctions de première classe sont des fonctions traitées comme un objet (ou pouvant être affectées à une variable).

Fonctions d'ordre supérieur sont des fonctions qui prennent au moins une fonction de première classe en tant que paramètre.

51
AshleyS

Ils sont différents.

Fonctions de première classe

Les valeurs dans une langue qui sont traitées de manière uniforme sont appelées "première classe". Ils peuvent être stockés dans des structures de données, passés sous forme d'arguments ou utilisés dans des structures de contrôle.

Les langues qui supportent les valeurs avec des types de fonction et les traitent de la même manière que les valeurs non-fonction peuvent être considérées comme ayant des "fonctions de première classe".

Fonctions d'ordre supérieur

Une des conséquences des fonctions de première classe est que vous devriez pouvoir passer une fonction en tant qu’argument à une autre fonction. Cette dernière fonction est maintenant "ordre supérieur". C'est une fonction qui prend une fonction en argument.

L'exemple canonique est "map"

map :: (a -> b) -> [a] -> [b]
map f []     = []
map f (x:xs) = f x : map f xs

C'est-à-dire qu'il faut une fonction et un tableau et renvoie un nouveau tableau avec la fonction appliquée à chaque élément.

Les langages fonctionnels - les langages dans lesquels les fonctions sont le principal moyen de construire des programmes - ont tous des fonctions de premier ordre. La plupart ont également des fonctions d'ordre supérieur (de très rares exceptions étant des langages comme Excel, que l'on peut qualifier de fonctionnels, mais pas d'ordre supérieur).

19
Don Stewart

Outre les réponses précédentes, notez qu'un langage doté de fonctions de première classe active automatiquement l'expression de fonctions d'ordre supérieur (car vous pouvez transmettre des fonctions en tant que paramètres, comme toute autre valeur).

D'autre part, vous pouvez imaginer des langages qui prennent en charge des fonctions d'ordre supérieur, mais ne les rendent pas de première classe (et où les paramètres qui sont des fonctions sont traités de manière spéciale et différents des paramètres de valeur "ordinaires").

Ainsi, la présence de fonctions de première classe (en tant que fonctionnalité de langage) implique la présence de fonctions d'ordre supérieur, mais pas l'inverse.

9
Andreas Rossberg

Les fonctions de première classe désignent tout ce que vous pouvez faire avec d'autres types (variables, booléens, nombres ...), vous pouvez le faire avec des fonctions. 

Par exemple, affectez-les à des variables, transmettez-les, créez-les à la volée. 

0
Ishan Patel

First Class les fonctions peuvent:

  • Être stocké dans des variables 
  • Être retourné d'une fonction. 
  • Être passé comme arguments dans une autre fonction.

Fonction d'ordre supérieur est une fonction qui renvoie une autre fonction.

Par exemple:

function highOrderFunc() {
  return function () {
    alert('hello');
  };
}
0
trthhrtz