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
Remplacer les caractères de chaîne en javascriptRemplacer les caractères de chaîne en javascriptMar 11, 2025 am 12:07 AM

Explication détaillée de la méthode de remplacement de la chaîne JavaScript et de la FAQ Cet article explorera deux façons de remplacer les caractères de chaîne dans JavaScript: le code JavaScript interne et le HTML interne pour les pages Web. Remplacer la chaîne dans le code JavaScript Le moyen le plus direct consiste à utiliser la méthode Remplace (): str = str.replace ("trouver", "remplacer"); Cette méthode remplace uniquement la première correspondance. Pour remplacer toutes les correspondances, utilisez une expression régulière et ajoutez le drapeau global G: str = str.replace (/ fi

Créez vos propres applications Web AjaxCréez vos propres applications Web AjaxMar 09, 2025 am 12:11 AM

Vous voici donc, prêt à tout savoir sur cette chose appelée Ajax. Mais qu'est-ce que c'est exactement? Le terme Ajax fait référence à un regroupement lâche de technologies utilisées pour créer un contenu Web interactif dynamique. Le terme Ajax, inventé à l'origine par Jesse J

10 JQUERY FUN ET PLIGINS DE GAMES10 JQUERY FUN ET PLIGINS DE GAMESMar 08, 2025 am 12:42 AM

10 plugins de jeu JQuery amusants pour rendre votre site Web plus attrayant et améliorer l'adhérence des utilisateurs! Bien que Flash soit toujours le meilleur logiciel pour développer des jeux Web occasionnels, JQuery peut également créer des effets surprenants, et bien qu'il ne soit pas comparable aux jeux Flash Pure Action, dans certains cas, vous pouvez également vous amuser inattendu dans votre navigateur. jeu jquery tic toe Le "Hello World" de la programmation de jeux a désormais une version jQuery. Code source JQUERY Crazy Word Composition Game Il s'agit d'un jeu de remplissage, et il peut produire des résultats étranges en raison de ne pas connaître le contexte du mot. Code source Jeu de balayage de la mine jQuery

Comment créer et publier mes propres bibliothèques JavaScript?Comment créer et publier mes propres bibliothèques JavaScript?Mar 18, 2025 pm 03:12 PM

L'article discute de la création, de la publication et du maintien des bibliothèques JavaScript, en se concentrant sur la planification, le développement, les tests, la documentation et les stratégies de promotion.

Tutoriel JQuery Parallax - Contexte d'en-tête animéTutoriel JQuery Parallax - Contexte d'en-tête animéMar 08, 2025 am 12:39 AM

Ce tutoriel montre comment créer un effet de fond de parallaxe captivant à l'aide de jQuery. Nous allons construire une bannière d'en-tête avec des images en couches qui créent une profondeur visuelle étonnante. Le plugin mis à jour fonctionne avec jQuery 1.6.4 et plus tard. Télécharger le

Commencer avec Matter.js: IntroductionCommencer avec Matter.js: IntroductionMar 08, 2025 am 12:53 AM

Matter.js est un moteur de physique du corps rigide 2D écrit en JavaScript. Cette bibliothèque peut vous aider à simuler facilement la physique 2D dans votre navigateur. Il fournit de nombreuses fonctionnalités, telles que la capacité de créer des corps rigides et d'attribuer des propriétés physiques telles que la masse, la zone ou la densité. Vous pouvez également simuler différents types de collisions et de forces, tels que la frottement de gravité. Matter.js prend en charge tous les navigateurs grand public. De plus, il convient aux appareils mobiles car il détecte les touches et est réactif. Toutes ces fonctionnalités font de votre temps pour apprendre à utiliser le moteur, car cela facilite la création d'un jeu ou d'une simulation 2D basé sur la physique. Dans ce tutoriel, je couvrirai les bases de cette bibliothèque, y compris son installation et son utilisation, et fournir un

Rafraîchissement automatique du contenu div utilisant jQuery et AjaxRafraîchissement automatique du contenu div utilisant jQuery et AjaxMar 08, 2025 am 12:58 AM

Cet article montre comment actualiser automatiquement le contenu d'un div toutes les 5 secondes à l'aide de jQuery et Ajax. L'exemple récupère et affiche les derniers articles de blog d'un flux RSS, ainsi que le dernier horodatage de rafraîchissement. Une image de chargement est en optiona

Comment optimiser le code JavaScript pour les performances dans le navigateur?Comment optimiser le code JavaScript pour les performances dans le navigateur?Mar 18, 2025 pm 03:14 PM

L'article traite des stratégies pour optimiser les performances JavaScript dans les navigateurs, en nous concentrant sur la réduction du temps d'exécution et la minimisation de l'impact sur la vitesse de chargement de la page.

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

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
2 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
2 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌

Outils chauds

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Puissant environnement de développement intégré PHP

MinGW - GNU minimaliste pour Windows

MinGW - GNU minimaliste pour Windows

Ce projet est en cours de migration vers osdn.net/projects/mingw, vous pouvez continuer à nous suivre là-bas. MinGW : un port Windows natif de GNU Compiler Collection (GCC), des bibliothèques d'importation et des fichiers d'en-tête librement distribuables pour la création d'applications Windows natives ; inclut des extensions du runtime MSVC pour prendre en charge la fonctionnalité C99. Tous les logiciels MinGW peuvent fonctionner sur les plates-formes Windows 64 bits.

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

VSCode Windows 64 bits Télécharger

VSCode Windows 64 bits Télécharger

Un éditeur IDE gratuit et puissant lancé par Microsoft

Adaptateur de serveur SAP NetWeaver pour Eclipse

Adaptateur de serveur SAP NetWeaver pour Eclipse

Intégrez Eclipse au serveur d'applications SAP NetWeaver.