Menu
1
Merci

Quelques mots de remerciements seront grandement appréciés.

Callbacks et foncteurs en javascript


Callback

Définition

Une callback est une fonction passée en paramètre d'une autre fonction.

Exemple

Dans l'exemple qui suit,
compute
attend une callback
f
et deux valeurs
a
et
b
.

function add(a, b) { return a + b; }
function mult(a, b) { return a * b; }
    
function compute(f, a, b) {
    r = f(a, b);
    document.write(r);
}

compute(add, 3, 5);  // Displays 8
compute(mult, 4, 7); // Displays 28

Avantage

Une callback sert typiquement à factoriser du code. Par exemple, on sent que trier une liste du plus petit au plus grand élément, ou du plus grand au plus petit élément sont deux algorithmes similaires (intuitivement, on change juste la relation d'ordre
<
par
>
).

Foncteur

Définition

Un foncteur est une généralisation de la callback. Il peut être passé en paramètre d'une fonction au même titre qu'une callback ordinaire. L'avantage est que contrairement à une fonction, il peut être paramétré.

Pré-requis

Dans des langages tels que C++ ou python, un foncteur se réalise en déclarant un objet. En C++, cet objet implémente
operator()
tandis qu'en python, il implémente la méthode
__call__
.

Bien que ces notions n'existent pas sous cette forme en javascript, il est possible de s'en sortir :
  • un objet se déclare comme une fonction. Les paramètres de la fonctions correspondent au paramètres du constructeur en C++ ou de
    __init__
    en python.
  • le foncteur se réalise en s'appuyant sur la notion de closure.

Exemple

Dans l'exemple qui suit, on définit un objet
Add
et on crée une instance de cet objet appelé
add
, qui servira de foncteur.

Ce foncteur est paramétré par
l
et
r
qui servent respectivement à ajouter le caractère
l
à gauche du résultat et
r
à droite du résultat.

function Add(l, r) {      /* Like __init__ */
    return function(a, b) {   /* Like __call__ */
        return l + (a + b) + r;
    }
}

function compute(f, a, b) {
    r = f(a, b);
    document.write(r);
}

add = Add("<", ">");
compute(add, 3, 5); // Displays <8>
compute(add, 4, 7); // Displays <28>

Avantage

Un foncteur permet d'obtenir facilement une callback à partir d'une fonction qui n'a pas exactement le prototype attendu. Dans l'exemple ci-dessus, on voit que
compute
attend une fonction à deux paramètres, alors que l'équivalent de
__call__
correspondrait plutôt à une fonction à 4 paramètres.
Jean-François Pillou

Cet article est régulièrement mis à jour par des experts sous la direction de Jean-François Pillou, fondateur de CommentCaMarche et directeur délégué au développement numérique du groupe Figaro.

En savoir plus sur l'équipe CCM

A voir également

Publié par mamiemando. Dernière mise à jour le 25 mai 2019 à 15:08 par mamiemando.

Ce document intitulé «  Callbacks et foncteurs en javascript  » issu de CommentCaMarche (https://www.commentcamarche.net/) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.

Ajouter un commentaire

Commentaires

Commenter la réponse de Utilisateur anonyme