La programmation fonctionnelle

23 septembre 2021

La programmation fonctionnelle est un paradigme de programmation où l’on construit le logiciel en utilisant les fonctions comme briques. Les fonctions sont reines : on en crée, on en retourne depuis d’autres, et on passe aussi des fonctions en paramètres à d’autres fonctions. 

Qu’est-ce qu’une fonction déjà ?

Mathématiquement, une fonction est tout simplement un processus qui fait correspondre chaque élément d’un ensemble d’entrées à un élément d’un ensemble de sorties. Par exemple, la fonction f(x) = 2x fait correspondre l’ensemble 1, 2, 3 à l’ensemble 2, 4, 6 respectivement. 

On peut aussi imaginer une fonction comme une boîte noire qui prend une entrée, applique une transformation dessus puis génère une sortie.

Pourquoi utiliser des fonctions mathématiques ?

Quand on construit un logiciel, d’habitude les fonctions (ou procédures) ne se limitent pas à faire correspondre des entrées à des sorties. Pourquoi se limiterait-on à faire des fonctions au sens mathématique du terme ?

  • Elles sont pures

La pureté est le fait qu’une fonction retourne systématiquement la même sortie pour une même entrée. Par exemple, la fonction f(x) = 2x va systématiquement retourner 10 pour la valeur 5. Ceci implique qu’une fonction dépend uniquement de sa valeur d’entrée. Dans ces conditions-là on parle de transparence référentielle, c’est à dire que si on remplace f(10) par 5 dans notre programme, il va continuer à fonctionner exactement comme avant.

Une fonction pure est prédictible, par conséquent elle est plus facile à débugger et à tester.

  • Elles n’ont pas d’effets de bord

Une fonction ne doit pas altérer un état externe. Le fait de modifier une ressource partagée par plusieurs fonctions peut mener à des comportements indésirables si d’autres fonctions en dépendent. S’empêcher de muter un état global éradique une classe entière de bugs. C’est pour cela que certains langages fonctionnels interdisent complètement la mutabilité. 

Éviter les effets de bords rend les programmes plus faciles à débugger et à tester.

  • Elles sont composables

Si on a une fonction d’un ensemble A vers un ensemble B et une fonction de l’ensemble B vers un ensemble C, on peut composer ces deux fonctions pour avoir une nouvelle fonction de A vers C directement. Ce mécanisme encourage à découper les traitements en créant des fonctions réutilisables.

La fonction résultante d’une composition pourrait elle-même être ré-utilisée. La composition permet de décrire un processus sous forme d’un pipeline où la valeur d’entrée passe d’étape en étape et où l’entrée de chaque étape est le résultat de sortie de l’étape précédente. La composition de fonctions est un outil incontournable pour abstraire les traitements complexes.

Mais c’est impossible d’écrire de vrais programmes sans effets de bord !

Certes, dans la réalité certains programmes doivent avoir des effets de bord. Par exemple, votre logiciel aurait besoin de modifier un fichier sur le disque, afficher un message sur l’écran ou encore faire une requête réseau qui modifie une ressource etc.

La solution est d’isoler les traitements à effets de bord. Imaginons notre système comme un fruit à noyau. Le noyau représente la partie pure et sans effets de bord, et le reste du fruit représente la partie avec effets de bord. L’idée est d’avoir un fruit avec une partie à effets de bords moindre. Le noyau lui doit rester le plus pur possible. 

Pour en savoir plus !

Cet article ne fait qu’introduire le sujet. Si tu es intéressé pour écrire du code plus maintenable et plus testable je t’invite à consulter le livre “Mastering JavaScript Functional Programming” de Federico Kereki, les articles d’Eric Elliott (compilés dans son livre “Composing Software”) ou encore le vénérable “Structure and Interpretation of Computer Programs” de Abelson et Sussman. Tu y trouveras plusieurs autres concepts très intéressants, ainsi que des outils pour faire face aux effets de bord.

 

Ousama, Team NEXTON

Partagez l'article

Articles récents Commentaires récentsArchives Catégories Méta
L’impact de l'évolution de la technologie sur la médecine
Qu’est-ce que la cartographie de la chaîne de valeur ?

Conseil, accompagnement et production digitale
5-7 rue Saint Fiacre 75002 Paris
01 81 69 73 90