J'essaie de comprendre les fonctions de rappel et d'ordre supérieur , mais il y a une description d'un article de blog, Comprendre les fonctions de rappel JavaScript et les utiliser , cela me déroute, l'implication étant qu'elles sont une seule et même chose:
Une fonction de rappel, également appelée fonction d'ordre supérieur, ...
Il a été répété textuellement sur une réponse Quora à la question concernant Qu'est-ce qu'une explication simple des fonctions d'ordre supérieur et des rappels en JavaScript? .
Cela n'a aucun sens pour moi. D'après ce que je comprends, une fonction d'ordre supérieur prend ou renvoie d'autres fonctions et une fonction de rappel est la fonction transmise / pris en , alors comment peut-il être les deux à la fois? Y a-t-il quelque chose que je ne comprends pas à propos de cette description?
3 Réponses :
Non, un rappel n'est pas nécessairement une fonction d'ordre supérieur. Ils peuvent l'être cependant. Vous pourriez avoir un rappel qui accepte une autre fonction comme argument.
Des rappels sont donnés aux fonctions d'ordre supérieur, ce qui peut être ce qui conduit à la confusion. Une fonction acceptant une autre fonction en tant qu'argument est l'un des critères qui la classent dans l'ordre supérieur.
Une fonction de rappel est une fonction passée dans une autre fonction en tant que argument, qui est ensuite invoqué dans la fonction externe pour terminer une sorte de routine ou d'action.
Une fonction qui renvoie une fonction appelée Fonction d'ordre supérieur
Une fonction de rappel n'est pas une fonction d'ordre supérieur, à moins que ce soit une fonction qui renvoie une fonction.
Rappel simple:
function toto(callback){ /** some routine or action before */ const func = callback(); func(); } function foo(){ console.log("I'm a callback and Higher-Order function"); return function(){ console.log("Do something..."); }; } toto(foo);
Fonction d'ordre supérieur simple
function toto(){ console.log("I'm a simple Higher-Order Function") return function(){ console.log("I'm the return function"); } } //first log const func = toto(); //second log func();
Rappel qui est également une fonction d'ordre supérieur:
function toto(callback){ /** some routine or action before */ callback(); } function foo(){ console.log("I'm a simple callback"); } toto(foo);
merci pour cet exemple! Clarifie absolument l'eau boueuse en expliquant comment un rappel peut être une fonction d'ordre supérieur, mais ils ne sont pas nécessairement identiques.
À mon avis, une fonction d'ordre supérieur est une fonction qui prend une autre fonction et l'utilise pour abstraire un comportement, par exemple cette méthode d'extension c #:
Second executed First executed First executed Second executed
il faut une fonction déterminant, quelle propriété prendre en compte lors du tri de la collection. Exemple d'utilisation:
void FirstAsync(){ Task.Run(()=>{ Thread.Sleep(1000); Console.WriteLine("First executed"); }); } void Second() { Console.WriteLine("Second executed"); } void FirstV2(Action callback) { Task.Run(() => { Thread.Sleep(1000); Console.WriteLine("First executed"); callback?.Invoke(); }); } void Main() { FirstAsync(); Second(); Thread.Sleep(2000); FirstV2(Second); }
Les rappels, d'autre part, peuvent être utilisés pour continuer le flux de l'application lorsqu'une action asynchrone ou longue est nécessaire, par exemple
var orderedByA = Enumerable.Range(0, 100) .Select(x=> new Item{ A = x, B = 100 - x }) .OrderByProperty(x => x.A);
J'irais avec la définition de Wikipédia - cet article semble avoir utilisé le terme de manière incorrecte.
Beaucoup de gens confondent ces concepts, car ils sont si étroitement liés.
Si vous rencontrez des problèmes avec ce concept, veuillez examiner les fermetures. Cela vous aidera à comprendre la différence beaucoup plus facilement. Cela pourrait aider dans cette entreprise: medium. com / @ zfrisch /…
Oui, personnes dans la section commentaires de l'article < / a> a également noté la mauvaise terminologie
@zfrisch Non, le fonctionnement des fermetures n'est pas pertinent pour définir les termes "rappel" et "fonction d'ordre supérieur".
@Bergi le processus de compréhension de ce qu'est une fermeture imo est utile car le retour d'une fonction à partir d'une fonction, etc. devient beaucoup plus facile à conceptualiser, mais bon, w / e.
@zfrisch regardant les fermetures était le suivant sur ma liste :)
@Bergi Je ne savais pas que d'autres personnes l'appelaient dans les commentaires. mais maintenant, il semble que je ne puisse même pas accéder à l'article ...