À retenir
- Déterminisme : à entrées égales, sorties égales.
- Zéro effet de bord : elle ne modifie aucune variable externe ni aucun fichier.
- Indépendance : elle ne dépend d'aucune donnée changeante (comme la date ou une variable globale).
Une fonction pure est une fonction qui se comporte comme une règle mathématique stricte : elle produit toujours le même résultat pour les mêmes données d'entrée et ne modifie rien en dehors d'elle-même. C'est l'analogie d'une calculatrice de poche : si vous tapez 2 + 2, vous obtiendrez toujours 4, et l'appareil ne changera pas la couleur de vos murs en effectuant le calcul.
Étymologie
Le terme provient de la logique mathématique et de la programmation fonctionnelle. Le mot « pure » souligne l'absence de pollution ou d'interférences avec l'état global du programme, par opposition aux fonctions dites « impures » qui interagissent avec leur environnement.
Exemples d'usage
- Une fonction
carre(n)qui renvoien * nest pure : elle ne dépend de rien d'autre que den. - Une fonction qui convertit un prix hors taxes en prix TTC en utilisant un taux fixe est pure.
- À l'inverse, une fonction qui renvoie l'heure actuelle est impure car le résultat change à chaque seconde.
Cas d'usage
Ce concept est central en programmation fonctionnelle (Haskell, Elixir) mais il est aussi devenu incontournable dans le développement web moderne (React, Redux). On l'utilise pour créer des composants d'interface prévisibles et pour faciliter le calcul parallèle, car plusieurs processeurs peuvent exécuter une fonction pure en même temps sans se gêner mutuellement.
Bonnes pratiques
Il est recommandé de séparer la logique de calcul (fonctions pures) de la gestion des interactions (fonctions impures comme l'écriture en base de données ou l'affichage). Cela rend le code beaucoup plus facile à tester de manière automatisée, car vous n'avez pas besoin de simuler un environnement complexe pour vérifier un calcul.
Synonymes
Antonymes
Conseil
Pour débuter, essayez d'écrire vos petites fonctions de traitement de données (filtres, calculs, formatage) sans jamais utiliser de variables déclarées en dehors de la fonction. Vous constaterez vite que votre code devient plus robuste et plus facile à relire.
Questions fréquentes
Pourquoi dit-on qu'elles sont plus faciles à tester ?
Parce qu'il suffit de leur donner des arguments et de vérifier le résultat. Il n'y a pas de risque qu'une base de données ou un fichier vienne fausser le test.
Peut-on coder uniquement avec des fonctions pures ?
Non, car un programme utile doit forcément avoir des effets de bord (afficher du texte, enregistrer un fichier, envoyer un mail). L'astuce est de concentrer le maximum de logique dans des fonctions pures et de limiter l'impureté aux bordures du programme.
Modifier un paramètre reçu est-il pur ?
Non. Si une fonction modifie directement un objet ou une liste qu'on lui a donné, c'est un effet de bord. Une fonction pure doit renvoyer une nouvelle version de la donnée sans toucher à l'originale.