Skip to main content

Qu'est-ce que la programmation fonctionnelle?

La programmation fonctionnelle est un paradigme de programmation où la base de calcul est l'évaluation des expressions.Certaines caractéristiques sont l'utilisation de fonctions d'ordre supérieur, de transparence référentielle et d'évaluation paresseuse.Les avantages du style de programmation comprennent que les programmes sont faciles à lire, sont très fiables et peuvent être divisé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 blocs de construction qui sont faciles à comprendre et à déboguer.Des exemples de certaines fonctions d'ordre supérieur sont la carte et le nid.La carte des fonctions prend une fonction F et la liste des 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: nid [f, x, 3] ' f (f (f (x))).

La programmation fonctionnelle pure prend une entrée et renvoie une sortie sans jamais modifier l'état d'une variable.En d'autres termes, une fonction avec la même entrée donnera toujours les mêmes résultats, quel que soit ce qui s'est passé auparavant 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 n'ont pas besoin d'être évaluées tant que leurs résultats ne sont pas nécessaires, ce qui est appelé évaluation paresseuse.Cela contraste totalement avec la programmation impérative, où un programme commence par la première commande et passe par la liste jusqu'à la dernière commande.L'évaluation paresseuse saute sur des 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 à d'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 entièrement 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 qui sont évaluées indépendamment en parallèle, améliorant considérablement les performances des programmes.

Malheureusement, tous les programmes ne se prêtent pas à l'informatique parallèle, et les programmes fonctionnels informatiques peuvent être plutôt lents.Les programmes fonctionnels reposent fortement sur la récursivité, ce qui est souvent moins efficace que l'utilisation de boucles traditionnelles ou de méthodes d'itération.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 à favoriser 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 Haskell et Erlang.Mathematica est spécialisée en mathématiques symboliques, R est spécialisé dans les statistiques et J est spécialisé dans l'analyse financière.Les langages multiparadigm tels que Scala et F # prennent en charge à la fois la programmation fonctionnelle et d'autres styles de programmation.