3
votes

Un rappel est-il également connu sous le nom de fonction d'ordre supérieur?

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 :


2
votes

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.


0 commentaires

6
votes

Fonction de rappel

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.

Renvoyer une fonction

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);


1 commentaires

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.



1
votes

À 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);


0 commentaires