Le currying, ou curryfication est sans doute une des notions que j’ai eu le plus de mal à appréhender lors du développement en javascript.

Le currying, kézako ?

Déjà, afin de clarifier, absolument rien à voir avec une épice ou de la cuisine exotique !

Wikipédia le définit de la manière suivante :

En informatique, plus précisément en programmation fonctionnelle, la curryfication est la transformation d’une fonction à plusieurs arguments en une fonction à un argument qui retourne une fonction sur le reste des arguments. Le terme vient du nom du mathématicien américain Haskell Curry

Le principe est donc de décomposer une fonction qui prends n paramètres en n fonctions qui prennent 1 seul paramètre.

Cela permet également de travailler avec des fonctions pures, un principe clé de la programmation fonctionnelle.

Exemple

Prenons par exemple une fonction qui additionne 2 entiers 1 et 2 et qui retournera 3 :

Si maintenant j’applique la méthode du currying à cette fonction je vais déclarer une fonction qui passera son résultat à une seconde fonction et qui retournera le résultat de l’addition :

A première vue, en dehors de la syntaxe, pas de gros avantage, et c’est bien là que j’ai bloqué pour bien comprendre le principe.

Avec le currying, il va être possible de faire une utilisation partielle de la fonction, et ainsi en composer rapidement d’autres. Avec notre fonction de base, nous allons créer une nouvelle fonction qui va ajouter 3 à un entier passé en paramètre :

La fonction ajout3 est une utilisation partielle de la fonction addition et pour terminer l’exemple :

Dans notre exemple, écrire : ajout3(5)

revient en fait à écrire : addition(3)(5)

D’où la puissance de l’utilisation partielle d’une fonction pour pouvoir en créer rapidement et facilement de nouvelles.

Conclusion

Le currying est à mon sens un outil puissant pour la composition de fonctions en javascript. Pour ma part je l’utilise même en dehors de la programmation fonctionnelle pour simplifier et factoriser le code de certaines fonctions.

 

Article également publié sur medium