Programmation Fonctionnelle
Introduction aux principes de base
Aparté
Tout d'abord il faut savoir que dans l'appellation langage de programmation fonctionnelle le mot fonctionnelle est à prendre uniquement au sens f(x) = un polynôme. Trop souvent des non-informaticiens considèrent que les langages fonctionnels sont des langages qui seraient plus orientés features que les autres, or le sens réel du mot fonctionnelle est bel et bien à prendre au sens de fonctions mathématiques du terme et non au sens fonctionnalités.
Autrement dit avec les langages fonctionnels :
- Vous ne développerez pas vos features plus vite.
- Vous ne réduirez pas plus le coût de maintenance de vos features.
- Vous ne permettrez pas plus à vos Business Analystes de coder parce qu'ils connaissent le "fonctionnel" de vos applications.
En général l'aspect mathématique de ces langages a même plutôt l'effet inverse sur une majorité des développeurs, l'humain raisonnant en successions d'étapes et non en applications affines sur des ensembles algébriques.
Pour s'en convaincre :
La programmation fonctionnelle est un paradigme de programmation de type déclaratif qui considère le calcul en tant qu'évaluation de fonctions mathématiques.
Wikipédia
Principes de base
Poursuivons la citation :
Comme le changement d'état et la mutation des données ne peuvent pas être représentés par des évaluations de fonctions la programmation fonctionnelle ne les admet pas, au contraire elle met en avant l'application des fonctions, contrairement au modèle de programmation impérative qui met en avant les changements d'état.
Wikipédia
Vous l'aurez donc compris, la programmation fonctionnelle consiste en les points suivants :
- On ne peut travailler qu'avec des fonctions (pas d'objets).
- Il n'y a pas la notion d'états (pas d'étapes ni de séquences).
- Les variables sont immutables (mais il y a des exceptions).
- L'écriture récursive remplace l'écriture itérative (pas de boucle while / for).
Dans les langages de programmation impérative, vous décrivez les étapes de votre programme, tandis qu'en programmation fonctionnelle, vous décrivez les transformations à appliquer sur vos valeurs.
Vous comprendrez donc que vous ne pouvez plus raisonner en terme de séquences mais à la place en un espace des valeurs d'arrivées (dans un certain type) qui se transformera plusieurs fois jusqu'à atteindre l'espace de valeurs souhaitées (potentiellement dans un autre type).
Le corollaire est que la programmation fonctionnelle est particulièrement adaptée au calcul parallèle puisqu'on ne décrit plus des séquences d'actions par essence non parallélisables mais des transformations autonomes sur des variables immutables (donc accessibles par plusieurs threads simultanément).
Enfin, la programmation fonctionnelle comme les autres styles de programmation n'est pas une Silver Bullet et ne résoudra pas tous vos problèmes !