Les fonctions pures sont les éléments constitutifs de la programmation fonctionnelle. Ils sont appréciés pour leur simplicité et leur testabilité.
Dans cet article, vous trouverez une
liste de contrôle qui vous aidera à déterminer si une fonction est pure ou non.

Liste de contrôle
Une fonction doit remplir deux conditions pour être considérée comme «pure»:- Chaque fois que la fonction retourne le même résultat lorsqu'elle est appelée avec le même ensemble d'arguments
- pas d'effets secondaires
Examinons plus en détail.
1. La même entrée => La même sortie
Comparez ceci:
const add = (x, y) => x + y; add(2, 4); // 6
Avec ceci:
let x = 2; const add = (y) => { x += y; }; add(4); // x === 6 (the first time)
Dans le premier cas, la valeur est renvoyée en fonction des paramètres spécifiés, quel que soit l'endroit / le moment où vous l'appelez.
Si vous ajoutez 2 et 4, vous obtenez toujours 6.
Rien n'affecte le résultat.
Fonctions impures = résultats incohérentsLe deuxième exemple ne renvoie rien. Il s'appuie sur la condition générale pour réaliser son travail en augmentant la variable hors de son champ.
Ce modèle est un cauchemar pour les développeurs.
L'état partagé introduit une dépendance temporelle. Vous obtenez des résultats différents selon le moment où vous avez appelé la fonction. La première fois, le résultat est 6, la prochaine fois 10 et ainsi de suite.
Quel est le meilleur?Dans quel cas obtiendrez-vous moins de bugs qui n'apparaissent que sous certaines conditions?
Dans quel cas avez-vous plus de chances de réussir dans un environnement multithread où les dépendances temporelles peuvent casser le système?
Certainement dans le premier.
2. Aucun effet secondaire

Ce test est une liste de contrôle en soi.
Exemples d'effets secondaires:- Modification des paramètres d'entrée
- console.log
- Appels HTTP (AJAX / fetch)
- Modification du système de fichiers
- Demandes DOM
En fait, tout travail effectué par une fonction n'est pas lié au calcul du résultat final.
Je vous conseille de regarder la
vidéo de Bob Martin.
Voici une fonction «sale» avec un effet secondaire.
const impureDouble = (x) => { console.log('doubling', x); return x * 2; }; const result = impureDouble(4); console.log({ result });
console.log ici est un effet secondaire, mais cela ne fera pas de mal. Nous obtiendrons toujours les mêmes résultats, étant donné les mêmes données.
Cependant, cela peut provoquer des problèmes.
Changement d'objet «impur»
const impureAssoc = (key, value, object) => { object[key] = value; }; const person = { name: 'Bobo' }; const result = impureAssoc('shoeSize', 400, person); console.log({ person, result });
La variable personne a été modifiée pour toujours car la fonction a été déclarée via une instruction d'affectation.
L'état partagé signifie que l'impact d'
impureAssoc n'est plus complètement apparent. Comprendre l'effet sur le système comprend désormais le suivi de chaque variable qu'il a déjà touchée et connaître son historique.
État partagé = dépendances temporelles.Nous pouvons effacer
impureAssoc en renvoyant simplement un nouvel objet avec les propriétés souhaitées.
"Nous le nettoyons" const pureAssoc = (key, value, object) => ({ ...object, [key]: value }); const person = { name: 'Bobo' }; const result = pureAssoc('shoeSize', 400, person); console.log({ person, result });
PureAssoc renvoie désormais le résultat du test, vous n'avez donc pas à vous inquiéter s'il change ailleurs.
Cela pourrait se faire comme ceci:
const pureAssoc = (key, value, object) => { const newObject = { ...object }; newObject[key] = value; return newObject; }; const person = { name: 'Bobo' }; const result = pureAssoc('shoeSize', 400, person); console.log({ person, result });
Changer l'entrée peut être dangereux, mais changer la copie n'est pas un problème. Le résultat final est une fonction testable et prévisible qui fonctionne peu importe où et quand vous l'appelez.
Les modifications sont limitées à cette petite zone et vous renvoyez toujours la valeur.
Résumé- Une fonction est pure si elle n'a pas d'effets secondaires et renvoie à chaque fois le même résultat lorsqu'elle est appelée avec le même ensemble d'arguments.
- Les effets secondaires incluent: changement d'entrée, appels HTTP, écriture sur disque, sortie sur écran.
- Vous pouvez cloner en toute sécurité puis modifier les paramètres d'entrée. Laissez simplement l'original inchangé.
- La syntaxe de distribution (... syntaxe) est le moyen le plus simple de cloner des objets et des tableaux.