Comment curry des fonctions en JavaScript
MaisonMaison > Blog > Comment curry des fonctions en JavaScript

Comment curry des fonctions en JavaScript

Aug 17, 2023

Cette fonctionnalité du langage JavaScript peut vous aider à ranger votre code et vous donnera une nouvelle appréciation du fonctionnement des fonctions.

Les fonctions Curried peuvent aider à rendre votre code JavaScript plus lisible et expressif. La technique de currying est idéale lorsque vous souhaitez décomposer une logique complexe en morceaux de code plus petits, autonomes et plus gérables.

Apprenez tout sur les fonctions curry en JavaScript, comment utiliser la technique de curry de fonctions pour créer des fonctions partiellement appliquées, ainsi que des cas d'utilisation réels pour les fonctions curry et les fonctions partiellement appliquées.

Le currying doit son nom au mathématicien Haskell B. Curry et le concept dérive du calcul Lambda. Le currying prend une fonction qui reçoit plus d'un paramètre et la divise en une série de fonctions unaires (à un paramètre). En d’autres termes, une fonction curry ne prend qu’un seul paramètre à la fois.

Vous trouverez ci-dessous un exemple de fonction curry :

LeconstruireSandwich()la fonction renvoie une autre fonction - une fonction anonyme qui reçoit leingrédient2 argument. Ensuite, cette fonction anonyme renvoie une autre fonction anonyme qui reçoitingrédient3 . Enfin, cette dernière fonction renvoie le modèle littéral, une manière de formater les chaînes en JavaScript.

Ce que vous avez créé est une fonction imbriquée où chaque fonction appelle celle en dessous jusqu'à la fin. Maintenant, quand tu appellesconstruireSandwich()et transmettez-lui un seul paramètre, il renverra la partie de la fonction dont vous n'avez pas encore fourni les arguments :

Vous pouvez voir dans le résultat que buildSandwich renvoie une fonction :

Pour terminer l'appel de fonction, vous devez fournir les trois arguments :

Ce code transmet « Bacon » à la première fonction, « Laitue » à la seconde et « Tomate » à la dernière fonction. En d'autres termes, leconstruireSandwich()La fonction est en réalité divisée en trois fonctions, chaque fonction ne recevant qu'un seul paramètre.

Bien qu'il soit parfaitement valable de curry en utilisant les fonctions traditionnelles, toute l'imbrication peut devenir assez moche à mesure que l'on s'enfonce. Pour contourner ce problème, vous pouvez utiliser les fonctions fléchées et profiter de leur syntaxe plus claire :

Cette version refactorisée est plus concise, un avantage de l'utilisation des fonctions fléchées par rapport aux fonctions normales. Vous pouvez appeler la fonction de la même manière que la précédente :

Les fonctions partiellement appliquées sont une utilisation courante du curry. Cette technique consiste à fournir uniquement les arguments nécessaires à la fois (plutôt que de fournir tous les arguments). Chaque fois que vous invoquez une fonction en passant tous les paramètres requis, vous dites que vous avez « appliqué » cette fonction.

Regardons un exemple :

Vous trouverez ci-dessous la version au curry de multiplier :

LecurriedMultiply()la fonction reçoit leXargument pour la première fonction etouipour la deuxième fonction, il multiplie ensuite les deux valeurs.

Pour créer la première fonction partiellement appliquée, appelezcurriedMultiple()avec le premier paramètre et assignez la fonction renvoyée à une variable :

À ce stade, le code a « partiellement appliqué » lecurriedMultiply() fonction. Alors quand tu veux appelerfoisDix(),il vous suffit de lui transmettre un numéro et le nombre sera automatiquement multiplié par 10 (qui est stocké dans la fonction appliquée) :

Cela vous permet de vous appuyer sur une seule fonction complexe en créant plusieurs fonctions personnalisées à partir de celle-ci, chacune avec sa propre fonctionnalité verrouillée.

Jetez un œil à un exemple plus proche d’un cas d’utilisation réel de développement Web. Ci-dessous vous avez unupdateElemText()fonction qui prend le nom d'un élémentidentifiantlors du premier appel, le contenu lors du deuxième appel, puis met à jour l'élément en fonction duidentifiantet le contenu que vous lui avez fourni :

Une autre utilisation courante du curry est la composition fonctionnelle. Cela vous permet d'appeler de petites fonctions, dans un ordre spécifique, et de les combiner en une seule fonction plus complexe.