Qu'est-ce que la programmation fonctionnelle?
La programmation fonctionnelle est un paradigme de programmation où la base de calcul est l'évaluation d'expressions. Certaines caractéristiques sont l'utilisation de fonctions d'ordre supérieur, la transparence référentielle et l'évaluation paresseuse. Les avantages du style de programmation sont que les programmes sont faciles à lire, sont très fiables et peuvent être décomposés en composants. Les inconvénients sont que les calculs peuvent être lents et que le style et la syntaxe sont complètement différents des autres styles de programmation courants. Le style de programmation fonctionnelle est plus souvent adopté par les universitaires que par les professionnels de l'informatique.
Comme son nom l'indique, les fonctions sont un élément fondamental de ce paradigme de programmation. Les fonctions peuvent être imbriquées dans d'autres fonctions, appelées fonctions d'ordre supérieur, et chaque fonction d'ordre supérieur peut être décomposée en fonctions de bloc de construction faciles à comprendre et à mettre au point. Map et Nest sont des exemples de fonctions d'ordre supérieur. La fonction Map prend une fonction F et la liste de variables, par exemple (x, y, z) et donne le résultat dans une liste: Map [F, (x, y, z)] = (F (x), F (y), F (z)). Nest prend la fonction F, la variable x et le nombre d'itérations: Nest [F, x, 3] = F (F (F (x))).
La programmation fonctionnelle pure prend une entrée et retourne une sortie sans jamais changer l'état d'une variable. En d'autres termes, une fonction avec la même entrée donnera toujours les mêmes résultats, indépendamment de ce qui s'est passé précédemment dans le programme. C'est ce qu'on appelle la transparence référentielle. Étant donné que les fonctions mathématiques sont référentiellement transparentes, la programmation fonctionnelle est intuitive pour de nombreux mathématiciens, ingénieurs et scientifiques.
La transparence référentielle des fonctions signifie que l'ordre d'évaluation des fonctions n'est pas important. Par conséquent, les fonctions ne doivent pas être évaluées avant que leurs résultats ne soient nécessaires, ce qui s'appelle une évaluation paresseuse. Cela contraste totalement avec la programmation impérative, dans laquelle un programme commence par la première commande et parcourt la liste jusqu'à la dernière commande. Une évaluation paresseuse ignore certaines parties du programme qui ne suivent pas logiquement ou sont superflues, ce qui optimise automatiquement le programme et peut réduire le temps de calcul.
La programmation fonctionnelle présente de nombreux avantages par rapport aux autres paradigmes de programmation. Les fonctions avec des entrées et des sorties claires sont faciles à lire et à comprendre. Une fois qu'une fonction est complètement déboguée, elle peut être utilisée de manière fiable dans d'autres applications. Les machines multicœurs peuvent être en mesure de calculer des fonctions évaluées indépendamment en parallèle, ce qui améliore considérablement les performances des programmes.
Malheureusement, tous les programmes ne se prêtent pas au calcul parallèle, et les programmes fonctionnels peuvent être plutôt lents. Les programmes fonctionnels reposent beaucoup sur la récursivité, qui est souvent moins efficace que l'utilisation de boucles ou de méthodes d'itération traditionnelles. En fait, la programmation fonctionnelle peut être assez maladroite et difficile à apprendre car elle ne ressemble pas à d'autres paradigmes plus courants tels que la programmation orientée objet.
Les universitaires ont tendance à privilégier la programmation fonctionnelle, car elle fournit un moyen clair et compréhensible de programmer des problèmes complexes du monde réel. Certaines langues pures sont le haskell et le erlang. Mathematica est spécialisée dans les mathématiques symboliques, R dans la statistique et J dans l’analyse financière. Les langages multiparadigmes tels que Scala et F # prennent en charge la programmation fonctionnelle et d’autres styles de programmation.