Points de base
- La programmation fonctionnelle est un paradigme de programmation qui met l'accent sur l'invariance, les fonctions de première classe, la transparence de la citation et les fonctions pures. Il aide à écrire un code élégant, maintenable, évolutif et prévisible.
- Les principes principaux de la programmation fonctionnelle incluent des fonctions pures (fonctions sans effets secondaires ou opérations qui ne sont pas liés à la sortie de la fonction), l'invariance (aucune modification directe des données), les fonctions de première classe (les fonctions peuvent être utilisées comme n'importe quelle autre valeur ) et une fonction d'ordre élevé (une fonction qui prend une fonction comme un ou plusieurs de ses paramètres, ou une fonction qui renvoie une fonction).
- La programmation fonctionnelle génère du code modulaire, qui est plus facile à déboguer et à tester. étant donné que les appels de fonction peuvent être distribués sur plusieurs noyaux, il peut également améliorer l'efficacité de calcul.
- Le principe de programmation fonctionnelle peut être incorporé dans n'importe quel langage de programmation et utilisé en conjonction avec d'autres styles de programmation tels que la programmation orientée objet. Même s'ils ne sont pas purement utilisés, ils peuvent produire des résultats positifs dans le code.
En tant que programmeur, vous voudrez peut-être écrire un code élégant, maintenable, évolutif et prévisible. Les principes de la programmation fonctionnelle (FP) peuvent grandement aider à atteindre ces objectifs.
La programmation fonctionnelle est un paradigme ou un style qui met l'accent sur l'invariance, les fonctions de première classe, la transparence de la citation et les fonctions pures. Si vous ne comprenez pas le sens de ces mots, ne vous inquiétez pas! Nous décomposons tous ces termes dans cet article.
La programmation fonctionnelle provenait du calcul λ, un système mathématique qui tourne autour de l'abstraction et de la généralisation de la fonction. Par conséquent, de nombreux langages de programmation fonctionnelle semblent très mathématiques. Mais la bonne nouvelle est: vous n'avez pas besoin d'utiliser un langage de programmation fonctionnel pour appliquer les principes de programmation fonctionnelle à votre code. Dans cet article, nous utiliserons JavaScript, qui possède de nombreuses fonctionnalités qui le rendent adapté à la programmation fonctionnelle sans être limité à ce paradigme.
Principes principaux de la programmation fonctionnelle
Maintenant que nous avons discuté de la programmation fonctionnelle, parlons des principes principaux derrière FP.
Fonction pure
J'aime considérer les fonctions comme des machines - elles acceptent l'entrée ou les paramètres, puis publient quelque chose, c'est-à-dire des valeurs de retour. Les fonctions pures n'ont pas de ?effets secondaires? ou d'opérations indépendantes de la sortie de la fonction. Certains effets secondaires potentiels incluent l'impression des valeurs ou les enregistrer avec console.log
, ou la manipulation de variables en dehors de la fonction.
Ceci est un exemple de fonction non pure:
let number = 2; function squareNumber() { number = number * number; // 非純操作:操作函數(shù)外部的變量 console.log(number); // 非純操作:控制臺記錄值 return number; } squareNumber();
La fonction suivante est une fonction pure. Il accepte l'entrée et produit la sortie.
let number = 2; function squareNumber() { number = number * number; // 非純操作:操作函數(shù)外部的變量 console.log(number); // 非純操作:控制臺記錄值 return number; } squareNumber();
Les fonctions pures s'exécutent indépendamment de l'état en dehors de la fonction, elles ne devraient donc pas dépendre de l'état global ou des variables en dehors d'elles-mêmes. Dans le premier exemple, nous utilisons la variable number
créée à l'extérieur de la fonction et la définissons à l'intérieur de la fonction. Cela viole ce principe. Si vous comptez fortement sur la modification des variables mondiales, votre code sera imprévisible et difficile à suivre. Il sera plus difficile de savoir où l'erreur s'est produite et pourquoi la valeur change. Au lieu de cela, le débogage est plus facile avec uniquement des variables locales d'entrée, de sortie et de fonction.
De plus, les fonctions doivent suivre la transparence de référence , ce qui signifie que compte tenu d'une entrée, leur sortie sera toujours la même. Dans l'exemple ci-dessus, si je passe 2 à la fonction, il reviendra toujours 4. Ce n'est pas le cas avec les appels d'API ou la génération de nombres aléatoires, ce ne sont que deux exemples. Compte tenu de la même entrée, la sortie peut ou non être renvoyée.
// 純函數(shù) function squareNumber(number) { return number * number; } squareNumber(2);
Invariance
La programmation fonctionnelle priorise également invariabilité , c'est-à-dire qu'aucune donnée n'est modifiée directement. L'invariance apporte une prévisibilité - vous connaissez la valeur des données, et elles ne changeront pas. Il rend le code simple, testable et fonctionne sur des systèmes distribués et multithreads.
L'invariance joue souvent un r?le lorsque nous travaillons avec des structures de données. De nombreuses méthodes de tableau dans JavaScript modifient directement les tableaux. Par exemple, .pop()
supprime un élément directement de la fin du tableau, tandis que .splice()
vous permet d'obtenir une partie du tableau. Au lieu de cela, dans le paradigme fonctionnel, nous copierons le tableau et supprimerons les éléments que nous voulons éliminer dans le processus.
// 不具有引用透明性 Math.random(); // 0.1406399143589343 Math.random(); // 0.26768924082159495
// 我們直接修改 myArr const myArr = [1, 2, 3]; myArr.pop(); // [1, 2]
Fonction de première classe
Dans la programmation fonctionnelle, nos fonctions sont des fonctions de première classe, ce qui signifie que nous pouvons les utiliser comme n'importe quelle autre valeur. Nous pouvons créer des tableaux de fonctions, les transmettre comme arguments à d'autres fonctions et les stocker en variables.
// 我們復制數(shù)組而不包含最后一個元素,并將其存儲到變量中 let myArr = [1, 2, 3]; let myNewArr = myArr.slice(0, 2); // [1, 2] console.log(myArr);
Fonctions d'ordre avancé
Les fonctions d'ordre supérieur sont des fonctions qui effectuent l'une des deux opérations: elles prennent la fonction comme un ou plusieurs de ses paramètres ou renvoient la fonction. JavaScript a intégré de nombreuses fonctions d'ordre supérieur de première classe - telles que map
, reduce
et filter
, nous pouvons les utiliser pour interagir avec les tableaux.
filter
est utilisé pour renvoyer un nouveau tableau de l'ancien tableau qui ne contient que des valeurs qui remplissent les conditions que nous fournissons.
let myFunctionArr = [() => 1 + 2, () => console.log("hi"), x => 3 * x]; myFunctionArr[2](2); // 6 const myFunction = anotherFunction => anotherFunction(20); const secondFunction = x => x * 10; myFunction(secondFunction); // 200
map
est habitué à parcourir les éléments dans le tableau et à modifier chaque élément en fonction de la logique fournie. Dans l'exemple suivant, nous doublez chaque élément du tableau en passant une fonction qui multiplie notre valeur de 2 à map
.
const myArr = [1, 2, 3, 4, 5]; const evens = myArr.filter(x => x % 2 === 0); // [2, 4]
reduce
nous permet de produire une seule valeur en fonction du tableau d'entrée - il est généralement utilisé pour résumer, aplatir les tableaux ou les valeurs de groupe d'une manière ou d'une autre.
const myArr = [1, 2, 3, 4, 5]; const doubled = myArr.map(i => i * 2); // [2, 4, 6, 8, 10]
Vous pouvez également implémenter ces fonctions vous-même! Par exemple, vous pouvez créer une fonction filter
comme ceci:
const myArr = [1, 2, 3, 4, 5]; const sum = myArr.reduce((i, runningSum) => i + runningSum); // 15
Le deuxième type de fonctions d'ordre supérieur (fonctions qui renvoie d'autres fonctions) est également un modèle relativement fréquent. Par exemple:
let number = 2; function squareNumber() { number = number * number; // 非純操作:操作函數(shù)外部的變量 console.log(number); // 非純操作:控制臺記錄值 return number; } squareNumber();
Vous pouvez également être intéressé par le curry, vous pouvez donc le lire!
combinaison de fonctions
La combinaison de fonction consiste à combiner plusieurs fonctions simples pour créer des fonctions plus complexes. Vous pouvez donc avoir une fonction averageArray
qui combine la fonction moyenne avec la fonction de somme qui résume les valeurs du tableau. Les fonctions individuelles sont petites et peuvent être répétées à d'autres fins et combinées ensemble pour effectuer un travail plus complet.
// 純函數(shù) function squareNumber(number) { return number * number; } squareNumber(2);
Avantages
La programmation fonctionnelle génère du code modulaire. Vous avez un petit nombre de fonctions que vous pouvez utiliser à plusieurs reprises. Comprendre les fonctions spécifiques de chaque fonction signifie qu'elle doit être simple pour identifier les erreurs et les tests d'écriture, surtout si la sortie de la fonction doit être prévisible.
De plus, si vous essayez d'utiliser plusieurs c?urs, vous pouvez distribuer des appels de fonction à ces c?urs, afin qu'il puisse améliorer l'efficacité de calcul.
Comment utiliser la programmation fonctionnelle?
Vous n'avez pas besoin de vous tourner complètement en programmation fonctionnelle pour intégrer toutes ces idées. Vous pouvez même bien utiliser beaucoup d'idées avec la programmation orientée objet, qui sont souvent considérées comme leur rival.
Par exemple, React intègre de nombreux principes fonctionnels, tels que les états immuables, mais utilise principalement la syntaxe de classe pendant de nombreuses années. Il peut également être mis en ?uvre dans presque tous les langues de programmation - vous n'avez pas besoin d'écrire Clojure ou Haskell à moins que vous ne le vouliez vraiment.
Même si vous n'êtes pas un puriste, les principes de programmation fonctionnelle peuvent produire des résultats positifs dans votre code.
Des questions fréquemment posées sur la programmation fonctionnelle
Quels sont les principes clés de la programmation fonctionnelle?
La programmation fonctionnelle est basée sur certains principes clés. Le premier est l'invariance, ce qui signifie qu'une fois qu'une variable est définie, elle ne peut pas être modifiée. Cela élimine les effets secondaires et rend le code plus facile à comprendre. Le deuxième principe est les fonctions pures, ce qui signifie que la sortie d'une fonction n'est déterminée que par son entrée, sans aucune entrée ni sortie masquée. Le troisième principe est les fonctions de première classe, ce qui signifie que les fonctions peuvent être utilisées comme entrée ou sortie vers d'autres fonctions. Cela permet des fonctions d'ordre supérieur et rend le code plus concis et plus facile à comprendre.
Quelle est la différence entre la programmation fonctionnelle et la programmation procédurale?
La principale différence entre la programmation fonctionnelle et procédurale est la fa?on dont ils traitent les données et l'état. Dans la programmation procédurale, les états de programme sont stockés en variables et peuvent être modifiés au fil du temps. Dans la programmation fonctionnelle, l'état ne change pas, mais crée un nouvel état à partir de l'état existant. Cela rend la programmation fonctionnelle plus facile à prévoir et à déboguer car il n'y a pas d'effets secondaires à craindre.
Quels sont les avantages de la programmation fonctionnelle?
La programmation fonctionnelle offre de nombreux avantages. Il peut rendre le code plus facile à lire et à comprendre car il évite les effets secondaires et les états mutables. Il rend également le code plus fiable, car il encourage l'utilisation de fonctions pures qui produisent toujours la même sortie pour la même entrée. De plus, la programmation fonctionnelle peut rendre le code plus facile à tester et à déboguer car les fonctions peuvent être testées isolément.
Quels sont les défis de la programmation fonctionnelle?
Bien que la programmation fonctionnelle présente de nombreux avantages, il a également certains défis. Il peut être difficile à apprendre, en particulier pour les personnes habituées à la programmation procédurale ou orientée objet. La mise en ?uvre de certains algorithmes dans le style fonctionnel peut également être plus difficile. De plus, la programmation fonctionnelle conduit parfois à un code moins efficace, car il implique souvent de créer de nouveaux objets plut?t que de modifier les objets existants.
Quels langages prennent en charge la programmation fonctionnelle?
De nombreux langages de programmation prennent en charge la programmation fonctionnelle dans une certaine mesure. Certains langages, tels que Haskell et Erlang, sont purement fonctionnels, tandis que d'autres, tels que JavaScript et Python, sont des langages multi-paradigmes qui prennent en charge la programmation fonctionnelle et d'autres paradigmes. Même les langages traditionnellement sans rapport avec la programmation fonctionnelle, tels que Java et C, ont ajouté des fonctionnalités pour soutenir la programmation fonctionnelle ces dernières années.
Comment gérer les effets secondaires dans la programmation fonctionnelle?
Dans la programmation fonctionnelle, évitez autant que possible les effets secondaires. Cela se fait en utilisant des fonctions pures qui ne modifient aucun état ou ne font aucune opération d'E / S. Lorsque des effets secondaires sont nécessaires, ils sont isolés et contr?lés. Par exemple, dans Haskell, les effets secondaires sont traités avec des monades, qui encapsulent les effets secondaires et fournissent un moyen de les relier ensemble de manière contr?lée.
Quelles sont les fonctions d'ordre supérieur dans la programmation fonctionnelle?
Une fonction d'ordre supérieur est une fonction qui prend une ou plusieurs fonctions comme paramètres, renvoie une fonction comme résultat ou effectue les deux opérations en même temps. Les fonctions d'ordre avancé sont une caractéristique clé de la programmation fonctionnelle car elles permettent à des fonctions d'être utilisées comme données. Cela peut conduire à un code plus propre et plus expressif.
Qu'est-ce que la récursivité dans la programmation fonctionnelle?
Recursion est une technique dans laquelle une fonction s'appelle dans sa propre définition. Dans la programmation fonctionnelle, la récursivité est souvent utilisée comme remplacement des boucles car les boucles impliquent des états mutables, qui sont évitées dans la programmation fonctionnelle. La récursivité peut être utilisée pour résoudre une grande variété de problèmes, du calcul des factorielles à la traversée des arbres.
Qu'est-ce que le curry dans la programmation fonctionnelle?
Le curry est une technique de programmation fonctionnelle dans laquelle une fonction avec plusieurs paramètres est convertie en une série de fonctions, chaque fonction n'a qu'un seul paramètre. Cela permet d'appliquer une partie de la fonction, où une fonction s'applique à certains de ses paramètres et renvoie une nouvelle fonction qui prend le reste des paramètres.
Qu'est-ce que la programmation réactive fonctionnelle?
La programmation réactive fonctionnelle (FRP) est un paradigme de programmation qui combine la programmation fonctionnelle et réactive. En FRP, les états du programme sont modélisés comme une série de valeurs immuables qui varient dans le temps, et les fonctions sont utilisées pour transformer et combiner ces valeurs. Cela permet de raisonner plus facilement sur les programmes asynchrones et axés sur les événements, car il évite les états mutables et les effets secondaires.
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!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

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

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

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

Bloc-notes++7.3.1
éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

Sujets chauds

Le mécanisme de collecte des ordures de JavaScript gère automatiquement la mémoire via un algorithme de compensation de balises pour réduire le risque de fuite de mémoire. Le moteur traverse et marque l'objet actif de l'objet racine, et non marqué est traité comme des ordures et effacés. Par exemple, lorsque l'objet n'est plus référencé (comme la définition de la variable sur NULL), il sera publié lors de la prochaine série de recyclage. Les causes courantes des fuites de mémoire comprennent: ① des minuteries ou des auditeurs d'événements non diffusés; ② Références aux variables externes dans les fermetures; ③ Les variables globales continuent de contenir une grande quantité de données. Le moteur V8 optimise l'efficacité du recyclage à travers des stratégies telles que le recyclage générationnel, le marquage incrémentiel, le recyclage parallèle / simultané, et réduit le temps de blocage principal. Au cours du développement, les références globales inutiles doivent être évitées et les associations d'objets doivent être rapidement décorées pour améliorer les performances et la stabilité.

Il existe trois fa?ons courantes d'initier des demandes HTTP dans Node.js: utilisez des modules intégrés, Axios et Node-Fetch. 1. Utilisez le module HTTP / HTTPS intégré sans dépendances, ce qui convient aux scénarios de base, mais nécessite un traitement manuel de la couture des données et de la surveillance des erreurs, tels que l'utilisation de https.get () pour obtenir des données ou envoyer des demandes de post via .write (); 2.AXIOS est une bibliothèque tierce basée sur la promesse. Il a une syntaxe concise et des fonctions puissantes, prend en charge l'async / attendre, la conversion JSON automatique, l'intercepteur, etc. Il est recommandé de simplifier les opérations de demande asynchrones; 3.Node-Fetch fournit un style similaire à la récupération du navigateur, basé sur la promesse et la syntaxe simple

Les types de données JavaScript sont divisés en types primitifs et types de référence. Les types primitifs incluent la cha?ne, le nombre, le booléen, le nul, un non défini et le symbole. Les valeurs sont immuables et les copies sont copiées lors de l'attribution des valeurs, de sorte qu'elles ne se affectent pas; Les types de référence tels que les objets, les tableaux et les fonctions stockent les adresses de mémoire, et les variables pointant vers le même objet s'afferchent mutuellement. Le typeof et l'instance de OFF peuvent être utilisés pour déterminer les types, mais prêtent attention aux problèmes historiques de typeofnull. Comprendre ces deux types de différences peut aider à écrire un code plus stable et fiable.

Bonjour, développeurs JavaScript! Bienvenue dans JavaScript News de cette semaine! Cette semaine, nous nous concentrerons sur: le différend de marque d'Oracle avec Deno, les nouveaux objets Time JavaScript sont pris en charge par les navigateurs, les mises à jour Google Chrome et certains outils de développeurs puissants. Commen?ons! Le différend de marque d'Oracle avec la tentative de Deno Oracle d'enregistrer une marque "JavaScript" a provoqué la controverse. Ryan Dahl, le créateur de Node.js et Deno, a déposé une pétition pour annuler la marque, et il pense que JavaScript est un niveau ouvert et ne devrait pas être utilisé par Oracle

Quel framework JavaScript est le meilleur choix? La réponse est de choisir la plus appropriée selon vos besoins. 1.RIATT est flexible et gratuit, adapté aux projets moyens et grands qui nécessitent une personnalisation élevée et des capacités d'architecture d'équipe; 2. Angular fournit des solutions complètes, adaptées aux applications au niveau de l'entreprise et à la maintenance à long terme; 3. Vue est facile à utiliser, adaptée à des projets de petite et moyenne taille ou à un développement rapide. De plus, s'il existe une pile technologique existante, la taille de l'équipe, le cycle de vie du projet et si le RSS est nécessaire sont également des facteurs importants dans le choix d'un cadre. En bref, il n'y a pas absolument le meilleur cadre, le meilleur choix est celui qui convient à vos besoins.

Iife (immédiatementInvokedFunctionExpression) est une expression de fonction exécutée immédiatement après la définition, utilisée pour isoler les variables et éviter de contaminer la portée globale. Il est appelé en emballage la fonction entre parenthèses pour en faire une expression et une paire de supports immédiatement suivis, tels que (function () {/ code /}) ();. Ses utilisations de base incluent: 1. évitez les conflits variables et empêchez la duplication de la dénomination entre plusieurs scripts; 2. Créez une portée privée pour rendre les variables internes invisibles; 3. Code modulaire pour faciliter l'initialisation sans exposer trop de variables. Les méthodes d'écriture courantes incluent les versions passées avec des paramètres et des versions de la fonction flèche ES6, mais notez que les expressions et les liens doivent être utilisés.

La promesse est le mécanisme central pour gérer les opérations asynchrones en JavaScript. Comprendre les appels de cha?ne, la gestion des erreurs et les combinants est la clé pour ma?triser leurs applications. 1. L'appel de la cha?ne renvoie une nouvelle promesse à travers. Puis () pour réaliser la concaténation des processus asynchrones. Chaque .then () re?oit le résultat précédent et peut renvoyer une valeur ou une promesse; 2. La gestion des erreurs doit utiliser .catch () pour attraper des exceptions pour éviter les défaillances silencieuses, et peut renvoyer la valeur par défaut dans Catch pour continuer le processus; 3. Combinateurs tels que promesse.all () (réussi avec succès uniquement après tout succès), promesse.race () (le premier achèvement est retourné) et promesse.allsetTled () (en attente de toutes les achèvements)

Cacheapi est un outil fourni par le navigateur pour mettre en cache les demandes de réseau, qui est souvent utilisée en conjonction avec travailleur de service pour améliorer les performances du site Web et l'expérience hors ligne. 1. Il permet aux développeurs de stocker manuellement des ressources telles que des scripts, des feuilles de style, des photos, etc.; 2. Il peut faire correspondre les réponses du cache en fonction des demandes; 3. Il prend en charge la suppression des caches spécifiques ou la nettoyage du cache entier; 4. Il peut mettre en ?uvre des stratégies de priorité de cache ou de priorité de réseau grace à l'écoute des événements Fetch; 5. Il est souvent utilisé pour le support hors ligne, accélérez la vitesse d'accès répétée, préchargement des ressources clés et du contenu de mise à jour des antécédents; 6. Lorsque vous l'utilisez, vous devez faire attention au contr?le de la version du cache, aux restrictions de stockage et à la différence entre le mécanisme de mise en cache HTTP.
