Une fonction pure est une fonction qui respecte deux critères fondamentaux :
- Déterminisme : pour les mêmes arguments, elle retourne toujours la même valeur.
- Absence d’effets secondaires : elle ne modifie aucun état externe (variables globales, objets passés en paramètre, DOM, fichiers, etc.) et ne dépend d’aucun état externe (heure, aléa, entrées utilisateur).
Une fonction pure est prévisible, testable, réutilisable et sûre dans les environnements concurrentiels (ex. : Web Workers, parallélisme).
Caractéristiques clés
- Ne mutent pas les objets ou tableaux reçus en entrée.
- Retournent de nouvelles structures (ex. : nouveau tableau, nouvel objet).
- N’ont pas de dépendances cachées (ex. :
Date.now(),Math.random()). - Sont auto-contenues : tout ce dont elles ont besoin est passé en paramètre.
Exemple de fonction pure :
function squareArray(arr) {
return arr.map(num => num * num);
}
const data = [1, 2, 3, 4];
const result = squareArray(data);
console.log(result); // renvoie [1, 4, 9, 16]
console.log(data); // [1, 2, 3, 4] → inchangé
La fonction utilise .map(), qui crée un nouveau tableau sans modifier l’original.
Contre-exemple (fonction impure)
function squareArrayImpure(arr) {
for (let i = 0; i < arr.length; i++) {
arr[i] = arr[i] * arr[i]; // Mutation de l'entrée !
}
return arr;
}
const data = [1, 2, 3, 4];
const result = squareArrayImpure(data);
console.log(result); // [1, 4, 9, 16]
console.log(data); // [1, 4, 9, 16] → modifié
Cette fonction altère l’état extérieur (le tableau data), ce qui la rend imprévisible et dangereuse dans un code complexe.
Pourquoi privilégier les fonctions pures ?
- Moins de bugs : pas de modifications cachées.
- Facilité de test : pas de contexte à mocker.
- Compatibilité avec paradigmes modernes : programmation fonctionnelle, React (état immuable), Redux, etc.
- Sécurité : idéal pour les systèmes critiques ou distribués.
Synonymes / termes associés
- Fonction déterministe
- Fonction sans effet de bord
- Pure function (anglicisme courant)
- Transformation immuable
Voir aussi : programmation fonctionnelle