JavaScript - Currying : Guide pour débutants

Bonjour à tous, futurs programmeurs ! Aujourd'hui, nous allons entreprendre un voyage passionnant dans le monde de JavaScript et explorer un concept appelé "currying". Ne vous inquiétez pas si vous n'en avez jamais entendu parler auparavant - nous allons commencer par les bases et progresser pas à pas. D'ici la fin de ce tutoriel, vous serez capable de fonctions currying comme un pro !

JavaScript - Currying

Qu'est-ce que le Currying ?

Avant de plonger dans les détails, comprenons ce qu'est réellement le currying. Le currying est une technique dans la programmation fonctionnelle où nous transformons une fonction qui prend plusieurs arguments en une séquence de fonctions, chacune prenant un seul argument.

Imaginez que vous faites un sandwich. Au lieu de rassembler tous les ingrédients en une fois, le currying est comme ajouter un ingrédient à la fois, étape par étape. Cela vous donne plus de contrôle et de flexibilité dans la construction de votre "sandwich fonction".

Comment réaliser le Currying en JavaScript

Maintenant, regardons comment nous pouvons implémenter le currying en JavaScript. Nous allons explorer deux méthodes principales : l'utilisation de closures et l'utilisation de la méthode bind().

Currying Using Closures

Les closures sont comme des boîtes magiques en JavaScript qui se souviennent de l'environnement dans lequel elles ont été créées. Nous pouvons utiliser cette superpuissance pour créer des fonctions currying. Commençons par un exemple simple :

function curry(f) {
return function(a) {
return function(b) {
return f(a, b);
};
};
}

function sum(a, b) {
return a + b;
}

let curriedSum = curry(sum);

console.log(curriedSum(2)(3)); // Output: 5

Dans cet exemple, curry est une fonction d'ordre supérieur qui prend une autre fonction f comme argument. Elle retourne une nouvelle fonction qui prend le premier argument a, qui à son tour retourne une autre fonction prenant le second argument b. Enfin, elle appelle la fonction originale f avec les deux arguments.

Décomposons cela étape par étape :

  1. Nous définissons une fonction curry qui transformera notre fonction régulière en une fonction currying.
  2. Nous avons une fonction sum simple qui additionne deux nombres.
  3. Nous créons une curriedSum en passant sum à notre fonction curry.
  4. Lorsque nous appelons curriedSum(2)(3), c'est en fait ce qui se passe :
  • curriedSum(2) retourne une fonction qui se souvient de 2 comme premier argument.
  • Nous appelons immédiatement cette fonction retournée avec (3), ce qui complète l'opération.

Cool, n'est-ce pas ? C'est comme si nous construisions notre appel de fonction piece par piece !

Currying Using bind() Method

JavaScript nous offre également une méthode intégrée appelée bind() que nous pouvons utiliser pour le currying. La méthode bind() crée une nouvelle fonction qui, lorsqu'elle est appelée, a son mot-clé this défini à une valeur fournie, avec une séquence donnée d'arguments précédant ceux fournis lors de l'appel de la nouvelle fonction.

Voyons comment nous pouvons utiliser bind() pour le currying :

function multiply(x, y) {
return x * y;
}

let multiplyByTwo = multiply.bind(this, 2);
console.log(multiplyByTwo(4)); // Output: 8

let multiplyByThree = multiply.bind(this, 3);
console.log(multiplyByThree(4)); // Output: 12

Dans cet exemple :

  1. Nous commençons par une fonction multiply simple qui prend deux arguments.
  2. Nous utilisons bind() pour créer une nouvelle fonction multiplyByTwo. Le 2 est préfixé comme premier argument.
  3. Lorsque nous appelons multiplyByTwo(4), c'est essentiellement multiply(2, 4) qui est appelé.
  4. Nous faisons la même chose pour créer multiplyByThree, préfixant 3 comme premier argument.

La méthode bind() nous permet de "fixer" certains arguments d'une fonction, créant ainsi une nouvelle fonction avec ces arguments déjà définis.

Cas d'utilisation du Currying

Maintenant que nous comprenons comment curry des fonctions, explorons pourquoi nous pourrions vouloir le faire. Le currying a plusieurs applications pratiques en JavaScript :

  1. Composition de fonctions : Le currying rend plus facile la composition de fonctions, où la sortie d'une fonction devient l'entrée d'une autre.

  2. Application partielle : Nous pouvons créer des fonctions spécialisées à partir de plus générales, comme dans notre exemple multiplyByTwo.

  3. Éviter les répétitions : Lorsque vous vous trouvez à appeler une fonction avec les mêmes arguments à plusieurs reprises, le currying peut aider à réduire les répétitions.

  4. Gestion des événements : En développement frontend, le currying peut être utile pour gérer des événements avec des paramètres supplémentaires.

Regardons un exemple réel d'utilisation du currying pour la gestion des événements :

function handleClick(message, event) {
console.log(message, event.target);
}

let button = document.getElementById('myButton');
button.addEventListener('click', handleClick.bind(null, 'Button clicked:'));

Dans cet exemple, nous utilisons le currying pour passer un paramètre supplémentaire à notre gestionnaire d'événements. Lorsque le bouton est cliqué, il affichera "Button clicked:" suivi de la cible de l'événement.

Méthodes pour le Currying en JavaScript

Voici un tableau récapitulatif des méthodes que nous avons discutées pour le currying en JavaScript :

Méthode Description Exemple
Closures Utilise des fonctions imbriquées pour créer des fonctions currying function curry(f) { return function(a) { return function(b) { return f(a, b); }; }; }
bind() Utilise la méthode bind() pour préfixer des arguments let multiplyByTwo = multiply.bind(this, 2);

Conclusion

Félicitations ! Vous avez刚刚 fait vos premiers pas dans le monde du currying en JavaScript. Souvenez-vous, comme pour toute nouvelle concept de programmation, la pratique est la clé. Essayez de créer vos propres fonctions currying et expérimentez avec différents cas d'utilisation.

Le currying peut sembler un peu abstrait au départ, mais plus vous l'utiliserez, plus vous commencerez à voir comment il peut rendre votre code plus flexible et réutilisable. C'est comme apprendre à utiliser un nouveau outil dans votre boîte à outils de programmation - au début, cela peut sembler étrange, mais bientôt vous vous demanderez comment vous avez pu coder sans !

Continuez à coder, continuez à apprendre, et surtout, amusez-vous ! JavaScript est un terrain de jeu de possibilités, et le currying n'est qu'une des nombreuses fonctionnalités passionnantes en attente de votre exploration.

Credits: Image by storyset