Programmation purement fonctionnelle - Purely functional programming

En informatique , la programmation purement fonctionnelle désigne généralement un paradigme de programmation - un style de construction de la structure et des éléments de programmes informatiques - qui traite tous les calculs comme l'évaluation de fonctions mathématiques . La programmation purement fonctionnelle peut également être définie en interdisant les changements d' état et les données mutables .

La programmation purement fonctionnelle consiste à s'assurer que les fonctions, à l'intérieur du paradigme fonctionnel , ne dépendront que de leurs arguments, indépendamment de tout état global ou local.

Différence entre la programmation fonctionnelle pure et impure

La différence exacte entre la programmation fonctionnelle pure et impure est un sujet de controverse.

Un programme est généralement dit fonctionnel lorsqu'il utilise certains concepts de programmation fonctionnelle , tels que les fonctions de première classe et les fonctions d'ordre supérieur . Cependant, une fonction de première classe n'a pas besoin d'être purement fonctionnelle, car elle peut utiliser des techniques du paradigme impératif , telles que des tableaux ou des méthodes d' entrée/sortie qui ne sont pas des programmes purement fonctionnels. En fait, les premiers langages de programmation cités comme fonctionnels, IPL et Lisp , étaient tous deux des langages fonctionnels « impurs » selon la définition actuelle.

Les structures de données purement fonctionnelles sont persistantes . La persistance est requise pour la programmation fonctionnelle ; sans cela, le même calcul pourrait renvoyer des résultats différents. La programmation fonctionnelle peut utiliser des structures de données persistantes non purement fonctionnelles , tandis que ces structures de données ne peuvent pas être utilisées dans des programmes purement fonctionnels.

Propriétés de la programmation purement fonctionnelle

Évaluation stricte ou non stricte

Chaque stratégie d'évaluation qui aboutit à un programme purement fonctionnel renvoie le même résultat. En particulier, cela garantit que le programmeur n'a pas à considérer dans quel ordre les programmes sont évalués, car une évaluation rapide renverra le même résultat que l' évaluation paresseuse . Cependant, il est toujours possible qu'une évaluation rapide ne se termine pas alors que l'évaluation paresseuse du même programme s'arrête. Un avantage de ceci est que l'évaluation paresseuse peut être mise en œuvre beaucoup plus facilement ; comme toutes les expressions renverront le même résultat à tout moment (quel que soit l'état du programme), leur évaluation peut être retardée autant que nécessaire.

Traitement en parallèle

La programmation purement fonctionnelle simplifie le calcul parallèle puisque deux parties purement fonctionnelles de l'évaluation n'interagissent jamais.

Structures de données

Les structures de données purement fonctionnelles sont souvent représentées d'une manière différente de leurs homologues impératifs . Par exemple, un tableau avec un accès et une mise à jour en temps constant est un composant de base de la plupart des langages impératifs et de nombreuses structures de données impératives, telles que la table de hachage et le tas binaire , sont basées sur des tableaux. Les tableaux peuvent être remplacés par map ou random access list , qui admet une implémentation purement fonctionnelle, mais le temps d'accès et de mise à jour est logarithmique . Par conséquent, des structures de données purement fonctionnelles peuvent être utilisées dans des langages non fonctionnels, mais elles peuvent ne pas être l'outil le plus efficace disponible, surtout si la persistance n'est pas requise.

En général, la conversion d'un programme impératif en un programme purement fonctionnel nécessite également de s'assurer que les structures auparavant modifiables sont désormais explicitement renvoyées par les fonctions qui les mettent à jour, une structure de programme appelée style de passage de magasin .

Langage purement fonctionnel

Un langage purement fonctionnel est un langage qui n'admet que la programmation purement fonctionnelle. Des programmes purement fonctionnels peuvent cependant être écrits dans des langages qui ne sont pas purement fonctionnels.

Les références