Skip to content

Latest commit

 

History

History
50 lines (30 loc) · 3.99 KB

nFonctionnal.md

File metadata and controls

50 lines (30 loc) · 3.99 KB
author since tags
Emmanuel Château-Dutier
2016-03-20
programmation, programmation fonctionnelle

Programmation fonctionnelle

XQuery et XSLT ont la qualité d’être des langages fonctionnels. Si la notion de programmation fonctionnelle a bénéficié d’un regain d’intérêt récemment on évoque plus habituellement les langages Haskell ou Lisp. On peut également programmer de manière fonctionnelle avec Elm ou Clojurescript deux langages qui se compilent en JavaScript.

Dans certains langages, la programmation fonctionnelle est surtout une manière d’écrire du code informatique dans laquelle on met l’accent sur l’écriture de fonction comme blocks constitutifs.

Notion de fonction

Au cœur de la notion de programmation fonctionnelle réside la notion de logique descriptive issue des mathématiques formelle de lambda-calcul (ou λ-calcul). Il s’agit d’un système formel inventé par Alonzo Church dans les années 30 qui fonde les concepts de fonction et d’application et a joué un rôle important dans le développement de la théorie des langages de programmation.

L’emploi de fonctions pures et un des fondement du paradigme de programmation fonctionnelle. On dit d’une fonction pure si celle-ci répond à ces deux conditions :

  • la fonction est déterministe : elle retourne toujours la même valeur pour les mêmes arguments. Le résultat de la fonction ne peut dépendre d’information cachée ou d’état qui peut changer au cours de l’exécution du programme ou entre plusieurs exécutions.
  • l’évaluattion du résultat ne doit provoquer aucun effet de bord observable comme des changements d’état ou entrée-sortie.

Transparence référentielle

Programmation fonctionnelle versus programmation impérative

La programmation impérative s’appuie sur le modèle des machines à états, avec une mémoire centrale et des instructions qui modifient son état grâce à des affectations successives. Cela nécessite pour le programmateur d’avoir à tout instant un modèle exact de l’état de la mémoire que le programme modifie. En programmation impérative, les effets de bord sont de facto la règle et sont la source de nombreuses difficultés ou de bugs.

La programmation fonctionnelle s’affranchit de manière radicale des effets de bords en interdisant toute opération d’affectation. Chaque composant du programme peut être conçu comme une fonction qui prend plusieurs paramètre en entrée et produit une sortie qui est fonction de cette entrée. Un programme est donc une application au sens mathématique qui ne donne qu’un seul résulat pour chaque ensemble de valeurs entrée.

Un langage dit purement fonctionnel n’autorise pas la programmation impérative. Il est de ce fait dénué d’effet de bord et permet potentiellement l’exécution concurrente.

Cette manière de penser la programmation peut poser des difficultés particulières pour certaines tâches. Notamment il ne permet pas l’assignement d’une variable dans une boucle.

Historique

Lisp un des premiers langages fonctionnels développé par John McCarty au MIT pour l’IBM 700/7000 à la fin des années 1950 (1958).

Sources