recherche
Maisoninterface Webjs tutorielUn guide débutant pour le curry dans JavaScript fonctionnel

A Beginner's Guide to Currying in Functional JavaScript

Un guide débutant pour le curry dans JavaScript fonctionnel

Le curry, ou application partielle, est l'une des techniques fonctionnelles qui peuvent sembler déroutantes pour les personnes familières avec des façons plus traditionnelles d'écrire JavaScript. Mais lorsqu'il est appliqué correctement, il peut réellement rendre votre JavaScript fonctionnel plus lisible.

Les plats clés

  • Le curry est une technique de programmation fonctionnelle qui permet l'application partielle des arguments d'une fonction, ce qui signifie que vous pouvez passer tout ou un sous-ensemble des arguments à laquelle une fonction attend. Si un sous-ensemble est passé, une fonction est renvoyée qui attend les arguments restants.
  • Le curry peut rendre le code JavaScript plus lisible et flexible. Il permet la création d'une bibliothèque de petites fonctions facilement configurées qui se comportent de manière cohérente, sont rapides à utiliser et peuvent être comprises lors de la lecture de votre code.
  • L'ordre des arguments est important lors du curry. L'argument qui est le plus susceptible d'être remplacé d'une variation à un autre devrait être le dernier argument transmis à la fonction d'origine.
  • Certaines bibliothèques JavaScript fonctionnelles, telles que RAMDA, offrent des fonctions de curry flexibles qui peuvent éclater les paramètres requis pour une fonction et vous permettre de les passer individuellement ou en groupes pour créer des variations currences personnalisées. Si vous prévoyez d'utiliser le curry largement, l'utilisation de ces bibliothèques est recommandée.

plus lisible et plus flexible

L'un des avantages présentés pour le JavaScript fonctionnel est un code plus court, plus serré qui revient au point dans le moins de lignes possible, et avec moins de répétition. Parfois, cela peut se faire au détriment de la lisibilité; Jusqu'à ce que vous soyez familier avec le fonctionnement de la programmation fonctionnelle, le code écrit de cette manière peut être plus difficile à lire et à comprendre.

Si vous avez déjà rencontré le terme curry, mais je n'ai jamais su ce que cela signifiait, vous pouvez être pardonné de le considérer comme une technique exotique et épicée que vous n'aviez pas besoin de vous soucier. Mais le curry est en fait un concept très simple, et il aborde certains problèmes familiers lorsqu'il s'agit d'arguments de fonction, tout en ouvrant une gamme d'options flexibles pour le développeur.

Qu'est-ce que le curry?

brièvement, le curry est un moyen de construire des fonctions qui permet l'application partielle des arguments d'une fonction. Cela signifie que vous pouvez transmettre tous les arguments à laquelle une fonction attend et obtenir le résultat, ou transmettre un sous-ensemble de ces arguments et récupérer une fonction qui attend le reste des arguments. C'est vraiment aussi simple.

Le curry est élémentaire dans des langues telles que Haskell et Scala, qui sont construites autour de concepts fonctionnels. JavaScript a des capacités fonctionnelles, mais le curry n'est pas intégré par défaut (du moins pas dans les versions actuelles de la langue). Mais nous connaissons déjà des astuces fonctionnelles, et nous pouvons aussi faire du curry, un travail pour nous en javascript.

Pour vous donner une idée de la façon dont cela pourrait fonctionner, créons notre première fonction au curry en JavaScript, en utilisant une syntaxe familière pour construire la fonctionnalité de curry que nous voulons. Par exemple, imaginons une fonction qui accueille quelqu'un par son nom. Nous savons tous comment créer une fonction de salut simple qui prend un nom et une salutation, et enregistre la salutation avec le nom à la console:

var greet = function(greeting, name) {
  console.log(greeting + ", " + name);
};
greet("Hello", "Heidi"); //"Hello, Heidi"

Cette fonction nécessite à la fois le nom et la salutation pour être transmis comme arguments afin de fonctionner correctement. Mais nous avons pu réécrire cette fonction en utilisant un curry imbriqué simple, afin que la fonction de base ne nécessite qu'une salutation, et elle renvoie une autre fonction qui prend le nom de la personne que nous voulons saluer.

Notre premier curry

var greetCurried = function(greeting) {
  return function(name) {
    console.log(greeting + ", " + name);
  };
};

Ce petit ajustement à la façon dont nous avons écrit la fonction nous permet de créer une nouvelle fonction pour tout type de salutation et de passer cette nouvelle fonction le nom de la personne que nous voulons saluer:

var greetHello = greetCurried("Hello");
greetHello("Heidi"); //"Hello, Heidi"
greetHello("Eddie"); //"Hello, Eddie"

Nous pouvons également appeler directement la fonction du curry d'origine, simplement en passant chacun des paramètres dans un ensemble séparé de parenthèses, l'une juste après l'autre:

greetCurried("Hi there")("Howard"); //"Hi there, Howard"

Pourquoi ne pas essayer ceci dans votre navigateur?

Curry toutes les choses!

Ce qui est cool, c'est maintenant que nous avons appris à modifier notre fonction traditionnelle pour utiliser cette approche pour gérer les arguments, nous pouvons le faire avec autant d'arguments que nous le souhaitons:

var greetDeeplyCurried = function(greeting) {
  return function(separator) {
    return function(emphasis) {
      return function(name) {
        console.log(greeting + separator + name + emphasis);
      };
    };
  };
};

Nous avons la même flexibilité avec quatre arguments que nous en avons avec deux. Peu importe jusqu'où la nidification va, nous pouvons créer de nouvelles fonctions personnalisées pour saluer autant de personnes que nous choisissons de nombreuses façons que de nos objectifs:

var greetAwkwardly = greetDeeplyCurried("Hello")("...")("?");
greetAwkwardly("Heidi"); //"Hello...Heidi?"
greetAwkwardly("Eddie"); //"Hello...Eddie?"

De plus, nous pouvons passer autant de paramètres que nous le souhaitons lors de la création de variations personnalisées sur notre fonction au curry d'origine, créant de nouvelles fonctions qui sont capables de prendre le nombre approprié de paramètres supplémentaires, chacun passé séparément dans son propre ensemble de parenthèses:

var sayHello = greetDeeplyCurried("Hello")(", ");
sayHello(".")("Heidi"); //"Hello, Heidi."
sayHello(".")("Eddie"); //"Hello, Eddie."

et nous pouvons définir les variations subordonnées tout aussi facilement:

var askHello = sayHello("?");
askHello("Heidi"); //"Hello, Heidi?"
askHello("Eddie"); //"Hello, Eddie?"

Currying Fonctions traditionnelles

Vous pouvez voir à quel point cette approche est puissante, surtout si vous devez créer de nombreuses fonctions personnalisées très détaillées. Le seul problème est la syntaxe. Au fur et à mesure que vous créez ces fonctions au curry, vous devez garder les fonctions renvoyées à la nidification et les appeler avec de nouvelles fonctions qui nécessitent plusieurs ensembles de parenthèses, chacun contenant son propre argument isolé. Il peut devenir désordonné.

Pour résoudre ce problème, une approche consiste à créer une fonction de curry rapide et sale qui prendra le nom d'une fonction existante qui a été écrite sans tous les rendements imbriqués. Une fonction de curry devrait retirer la liste des arguments pour cette fonction et les utiliser pour renvoyer une version au curry de la fonction d'origine:

var greet = function(greeting, name) {
  console.log(greeting + ", " + name);
};
greet("Hello", "Heidi"); //"Hello, Heidi"

Pour l'utiliser, nous lui transmettons le nom d'une fonction qui prend un certain nombre d'arguments, ainsi que autant d'arguments que nous voulons pré-populer. Ce que nous récupérons est une fonction qui attend les arguments restants:

var greetCurried = function(greeting) {
  return function(name) {
    console.log(greeting + ", " + name);
  };
};

Et comme auparavant, nous ne sommes pas limités en termes de nombre d'arguments que nous voulons utiliser lors de la construction de fonctions dérivées de notre fonction originale au curry:

var greetHello = greetCurried("Hello");
greetHello("Heidi"); //"Hello, Heidi"
greetHello("Eddie"); //"Hello, Eddie"

devenir sérieux au sujet du curry

Notre petite fonction de curry peut ne pas gérer tous les cas de bord, tels que les paramètres manquants ou facultatifs, mais il fait un travail raisonnable tant que nous restons stricts sur la syntaxe pour passer des arguments.

Certaines bibliothèques JavaScript fonctionnelles telles que RAMDA ont des fonctions de curry plus flexibles qui peuvent éclater les paramètres requis pour une fonction et vous permettre de les passer individuellement ou en groupes pour créer des variations currencales personnalisées. Si vous voulez utiliser le curry largement, c'est probablement la voie à suivre.

quelle que soit la façon dont vous choisissez d'ajouter du curry à votre programmation, que vous souhaitiez simplement utiliser des parenthèses imbriquées ou que vous préférez inclure une fonction de transport plus robuste, proposer une convention de dénomination cohérente pour vos fonctions au curry vous aidera à faire de votre code votre code plus lisible. Chaque variation dérivée d'une fonction devrait avoir un nom qui indique clairement comment il se comporte et quels arguments il attend.

Ordre d'argument

Une chose qui est importante à garder à l'esprit lorsque le curry est l'ordre des arguments. En utilisant l'approche que nous avons décrite, vous voulez évidemment l'argument que vous êtes le plus susceptible de remplacer d'une variation à la suivante pour être le dernier argument transmis à la fonction d'origine.

Réfléchir à l'avance à l'ordre des arguments facilitera la planification du curry et l'appliquera à votre travail. Et considérer l'ordre de vos arguments en termes de moins le plus susceptible de changer n'est pas une mauvaise habitude de se lancer de toute façon lors de la conception de fonctions.

Conclusion

Le currying est une technique incroyablement utile de JavaScript fonctionnel. Il vous permet de générer une bibliothèque de petites fonctions facilement configurées qui se comportent de manière cohérente, sont rapides à utiliser et qui peuvent être comprises lors de la lecture de votre code. L'ajout de curry à votre pratique de codage encouragera l'utilisation de fonctions partiellement appliquées tout au long de votre code, en évitant beaucoup de répétitions potentielles, et peut vous aider à faire de meilleures habitudes sur la dénomination et la gestion des arguments de fonction.

Si vous avez apprécié, ce post, vous pourriez également aimer certains des autres de la série:

  • Une introduction au JavaScript fonctionnel
  • Fonctions d'ordre supérieur en javascript
  • Recursion dans JavaScript fonctionnel

Questions fréquemment posées (FAQ) sur le curry dans JavaScript fonctionnel

Quelle est la principale différence entre le curry et l'application partielle dans JavaScript?

Le curry et l'application partielle sont les deux techniques en JavaScript qui vous permettent de pré-remplir certains des arguments d'une fonction. Cependant, ils diffèrent dans leur mise en œuvre et leur utilisation. Le curry est un processus de programmation fonctionnelle où une fonction avec plusieurs arguments est transformée en une séquence de fonctions, chacune avec un seul argument. D'un autre côté, l'application partielle fait référence au processus de fixation d'un certain nombre d'arguments à une fonction, produisant une autre fonction d'arité plus petite. Alors que le curry produit toujours des fonctions unares (1-arity) imbriquées, l'application partielle peut produire des fonctions de toute aité.

Comment le curry améliore-t-il la lisibilité et la maintenabilité du code dans JavaScript?

Le curry peut améliorer considérablement le code du code lisibilité et maintenabilité en JavaScript. En décomposant les fonctions complexes en fonctions unares plus simples, le curry rend le code plus lisible et plus facile à comprendre. Il favorise également un code plus propre et plus modulaire, car chaque fonction exécute une seule tâche. Cette modularité rend le code plus facile à maintenir et à déboguer, car les problèmes peuvent être isolés à des fonctions spécifiques.

Pouvez-vous fournir un exemple de curry en javascript?

Bien sûr, considérons un exemple simple de une fonction qui ajoute trois nombres. Sans curry, la fonction peut ressembler à ceci:

Fonction Ajouter (a, b, c) {
renvoie un b c;
}
console.log (add (1, 2, 3 )); // Sorties: 6

Avec le curry, la même fonction serait écrite comme:

Fonction Add (a) {
return function (b) {
function de retour (c ) {
Renvoie un b c;
}
}
}
console.log (add (1) (2) (3)); // Sorties: 6

Quelles sont les limites ou les inconvénients de l'utilisation de curry en javascript?

Bien que le curry ait ses avantages, il a également certaines limites. L'un des principaux inconvénients est qu'il peut rendre le code plus difficile à comprendre pour ceux qui ne connaissent pas le concept, en particulier lorsqu'ils traitent des fonctions avec un grand nombre d'arguments. Il peut également conduire à des frais généraux en raison de la création de fermetures supplémentaires. En outre, il peut rendre les appels de fonction plus verbeux, car chaque argument doit être transmis dans un ensemble distinct de parenthèses.

Comment le curry est-il lié aux fonctions d'ordre supérieur en javascript?

Le curry est étroitement est étroitement. lié au concept de fonctions d'ordre supérieur en JavaScript. Une fonction d'ordre supérieur est une fonction qui prend une ou plusieurs fonctions comme des arguments, renvoie une fonction comme résultat, ou les deux. Étant donné que le curry consiste à transformer une fonction en une séquence d'appels de fonction, il implique intrinsèquement l'utilisation de fonctions d'ordre supérieur.

Le curry peut être utilisé avec les fonctions de flèche en javascript?

Oui, le curry peut être utilisé avec les fonctions fléchées en javascript. En fait, la syntaxe des fonctions de flèche les rend particulièrement bien adaptés au curry. Voici comment la fonction ADD précédente pourrait être écrite à l'aide de fonctions fléchées:

const Add = a => b => c => a b c;
console.log (add (1) (2) (3) )); // Sorties: 6

Le curry est-il utilisé dans les bibliothèques ou les frameworks JavaScript populaires?

Oui, le currying est utilisé dans plusieurs bibliothèques et frameworks JavaScript populaires. Par exemple, il s'agit d'un concept fondamental dans des bibliothèques comme Ramda et Lodash, qui fournissent des fonctions d'utilité pour la programmation fonctionnelle en JavaScript. Il est également utilisé dans Redux, une bibliothèque de gestion d'État populaire pour React.

Comment le currying aide-t-il à la composition des fonctions en JavaScript?

Le curry peut être très utile en ce qui concerne la composition de la fonction en JavaScript. La composition de la fonction est le processus de combinaison de deux ou plusieurs fonctions pour créer une nouvelle fonction. Étant donné que le curry vous permet de créer des fonctions unaires, il simplifie la composition des fonctions en vous assurant que chaque fonction a exactement une entrée et une sortie.

Toutes les fonctions JavaScript peuvent-elles être curry?

En théorie, n'importe quel javascript La fonction avec deux arguments ou plus peut être curry. Cependant, dans la pratique, il peut ne pas toujours être pratique ou bénéfique de currer une fonction. Par exemple, le curry peut ne pas être utile pour les fonctions qui doivent être appelées avec différents nombres d'arguments à différents moments.

Comment le curry affecte-t-il les performances du code javascrip Votre code plus lisible et modulaire, il peut également avoir un léger impact sur les performances. C'est parce que chaque fois que vous currez une fonction, vous créez de nouvelles fermetures. Cependant, dans la plupart des cas, l'impact sur les performances est négligeable et est contrebalancé par les avantages d'une amélioration de la lisibilité et de la maintenabilité du code.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Python vs JavaScript: considérations de performance et d'efficacitéPython vs JavaScript: considérations de performance et d'efficacitéApr 30, 2025 am 12:08 AM

Les différences de performance et d'efficacité entre Python et JavaScript se reflètent principalement dans: 1) comme un langage interprété, Python fonctionne lentement mais a une efficacité de développement élevée et convient au développement rapide des prototypes; 2) JavaScript est limité au thread unique dans le navigateur, mais les E / S multi-threading et asynchrones peuvent être utilisées pour améliorer les performances dans Node.js, et les deux ont des avantages dans les projets réels.

Les origines de JavaScript: explorer son langage d'implémentationLes origines de JavaScript: explorer son langage d'implémentationApr 29, 2025 am 12:51 AM

JavaScript est originaire de 1995 et a été créé par Brandon Ike, et a réalisé que la langue en langue C. 1.C offre des capacités de programmation élevées et au niveau du système pour JavaScript. 2. La gestion de la mémoire de JavaScript et l'optimisation des performances reposent sur le langage C. 3. La fonctionnalité multiplateforme du langage C aide JavaScript à s'exécuter efficacement sur différents systèmes d'exploitation.

Dans les coulisses: quel langage alimente JavaScript?Dans les coulisses: quel langage alimente JavaScript?Apr 28, 2025 am 12:01 AM

JavaScript s'exécute dans les navigateurs et les environnements Node.js et s'appuie sur le moteur JavaScript pour analyser et exécuter du code. 1) Générer une arborescence de syntaxe abstraite (AST) au stade d'analyse; 2) Convertir AST en bytecode ou code machine à l'étape de compilation; 3) Exécutez le code compilé à l'étape d'exécution.

L'avenir de Python et Javascript: tendances et prédictionsL'avenir de Python et Javascript: tendances et prédictionsApr 27, 2025 am 12:21 AM

Les tendances futures de Python et JavaScript incluent: 1. Python consolidera sa position dans les domaines de l'informatique scientifique et de l'IA, 2. JavaScript favorisera le développement de la technologie Web, 3. Le développement de plate-forme multiplié deviendra un sujet brûlant, et 4. L'optimisation des performances sera le focus. Les deux continueront d'étendre les scénarios d'application dans leurs champs respectifs et de faire plus de percées dans les performances.

Python vs JavaScript: environnements et outils de développementPython vs JavaScript: environnements et outils de développementApr 26, 2025 am 12:09 AM

Les choix de Python et JavaScript dans les environnements de développement sont importants. 1) L'environnement de développement de Python comprend Pycharm, Jupyternotebook et Anaconda, qui conviennent à la science des données et au prototypage rapide. 2) L'environnement de développement de JavaScript comprend Node.js, VScode et WebPack, qui conviennent au développement frontal et back-end. Le choix des bons outils en fonction des besoins du projet peut améliorer l'efficacité du développement et le taux de réussite du projet.

JavaScript est-il écrit en C? Examiner les preuvesJavaScript est-il écrit en C? Examiner les preuvesApr 25, 2025 am 12:15 AM

Oui, le noyau du moteur de JavaScript est écrit en C. 1) Le langage C fournit des performances efficaces et un contrôle sous-jacent, qui convient au développement du moteur JavaScript. 2) Prendre le moteur V8 comme exemple, son noyau est écrit en C, combinant l'efficacité et les caractéristiques orientées objet de C. 3) Le principe de travail du moteur JavaScript comprend l'analyse, la compilation et l'exécution, et le langage C joue un rôle clé dans ces processus.

Rôle de JavaScript: rendre le Web interactif et dynamiqueRôle de JavaScript: rendre le Web interactif et dynamiqueApr 24, 2025 am 12:12 AM

JavaScript est au cœur des sites Web modernes car il améliore l'interactivité et la dynamicité des pages Web. 1) Il permet de modifier le contenu sans rafraîchir la page, 2) manipuler les pages Web via Domapi, 3) prendre en charge les effets interactifs complexes tels que l'animation et le glisser-déposer, 4) Optimiser les performances et les meilleures pratiques pour améliorer l'expérience utilisateur.

C et JavaScript: la connexion expliquéeC et JavaScript: la connexion expliquéeApr 23, 2025 am 12:07 AM

C et JavaScript réalisent l'interopérabilité via WebAssembly. 1) Le code C est compilé dans le module WebAssembly et introduit dans un environnement JavaScript pour améliorer la puissance de calcul. 2) Dans le développement de jeux, C gère les moteurs de physique et le rendu graphique, et JavaScript est responsable de la logique du jeu et de l'interface utilisateur.

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

VSCode Windows 64 bits Télécharger

VSCode Windows 64 bits Télécharger

Un éditeur IDE gratuit et puissant lancé par Microsoft

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

Dreamweaver Mac

Dreamweaver Mac

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Version Mac de WebStorm

Version Mac de WebStorm

Outils de développement JavaScript utiles