Qu'est-ce que la programmation fonctionnelle ? Tutoriel avec exemple

Qu'est-ce que la programmation fonctionnelle ?

La programmation fonctionnelle (รฉgalement appelรฉe FP) est une faรงon de penser la construction de logiciels en crรฉant des fonctions pures. Il รฉvite les concepts d'รฉtat partagรฉ et de donnรฉes mutables observรฉs dans la programmation orientรฉe objet.

Les langages fonctionnels s'intรฉressent aux expressions et aux dรฉclarations plutรดt qu'ร  l'exรฉcution d'instructions. Par consรฉquent, contrairement ร  dโ€™autres procรฉdures qui dรฉpendent dโ€™un รฉtat local ou global, la sortie de valeur dans FP dรฉpend uniquement des arguments passรฉs ร  la fonction.

Caractรฉristiques de la programmation fonctionnelle

  • La mรฉthode de programmation fonctionnelle se concentre sur les rรฉsultats et non sur le processus
  • L'accent est mis sur ce qui doit รชtre calculรฉ
  • Les donnรฉes sont immuables
  • Programmation fonctionnelle Dรฉcomposer le problรจme en ยซ fonctions ยป
  • Il est construit sur le concept de fonctions mathรฉmatiques qui utilisent des expressions conditionnelles et la rรฉcursivitรฉ pour effectuer le calcul.
  • Il ne prend pas en charge les itรฉrations comme les instructions de boucle et les instructions conditionnelles comme If-Else

Histoire de la programmation fonctionnelle

  • La base de la programmation fonctionnelle est le calcul Lambda. Il a รฉtรฉ dรฉveloppรฉ dans les annรฉes 1930 pour l'application fonctionnelle, la dรฉfinition et la rรฉcursivitรฉ
  • LISP a รฉtรฉ le premier langage de programmation fonctionnel. McCarthy l'a conรงu en 1960
  • ร€ la fin des annรฉes 70, des chercheurs de l'Universitรฉ d'ร‰dimbourg ont dรฉfini le ML(Meta Language)
  • Au dรฉbut des annรฉes 80, le langage Hope ajoute des types de donnรฉes algรฉbriques pour la rรฉcursivitรฉ et le raisonnement รฉquationnel.
  • En 2004, innovation du langage fonctionnel ยซ Scala ยป.

Langages de programmation fonctionnels

L'objectif de tout langage FP est d'imiter les fonctions mathรฉmatiques. Cependant, le processus de calcul de base est diffรฉrent en programmation fonctionnelle.

Voici quelques langages de programmation fonctionnels les plus importants :

  • Haskell
  • S
  • Clojure
  • Scala
  • Erlang
  • Clean
  • F#
  • ML/OCaml Lisp/Schรฉma
  • XSLT
  • SQL
  • Mathematica

Terminologie de programmation fonctionnelle de base et Concepts

Terminologie de programmation fonctionnelle de base et Concepts

Donnรฉes immuables

Les donnรฉes immuables signifient que vous devriez facilement pouvoir crรฉer des structures de donnรฉes au lieu de modifier celles qui existent dรฉjร .

Transparence rรฉfรฉrentielle

Les programmes fonctionnels doivent effectuer des opรฉrations comme si c'รฉtait la premiรจre fois. Ainsi, vous saurez ce qui a pu se produire ou non lors de l'exรฉcution du programme et ses effets secondaires. En terme de FP, cela s'appelle transparence rรฉfรฉrentielle.

Modularitรฉ

La conception modulaire augmente la productivitรฉ. Les petits modules peuvent รชtre codรฉs rapidement et ont plus de chances d'รชtre rรฉutilisรฉs, ce qui conduit sรปrement ร  un dรฉveloppement plus rapide des programmes. En dehors de cela, les modules peuvent รชtre testรฉs sรฉparรฉment, ce qui vous aide ร  rรฉduire le temps consacrรฉ aux tests unitaires et au dรฉbogage.

Consommabilitรฉ

La maintenabilitรฉ est un terme simple qui signifie que la programmation FP est plus facile ร  maintenir car vous n'avez pas ร  vous soucier de modifier accidentellement quoi que ce soit en dehors de la fonction donnรฉe.

Fonction de premiรจre classe

ยซ Fonction de premiรจre classe ยป est une dรฉfinition attribuรฉe aux entitรฉs du langage de programmation qui n'ont aucune restriction quant ร  leur utilisation. Par consรฉquent, des fonctions de premiรจre classe peuvent apparaรฎtre nโ€™importe oรน dans le programme.

Fermeture

La fermeture est une fonction interne qui peut accรฉder aux variables de la fonction parent, mรชme aprรจs l'exรฉcution de la fonction parent.

Fonctions d'ordre supรฉrieur

Les fonctions d'ordre supรฉrieur prennent d'autres fonctions comme arguments ou les renvoient comme rรฉsultats.

Les fonctions d'ordre supรฉrieur permettent des applications partielles ou du curry. Cette technique applique une fonction ร  ses arguments un par un, chaque application renvoyant une nouvelle fonction qui accepte l'argument suivant.

Fonction pure

Une ยซ fonction pure ยป est une fonction dont les entrรฉes sont dรฉclarรฉes comme entrรฉes et aucune dโ€™entre elles ne doit รชtre masquรฉe. Les sorties sont รฉgalement dรฉclarรฉes comme sorties.

Les fonctions pures agissent sur leurs paramรจtres. Ce nโ€™est pas efficace si vous ne retournez rien. De plus, il offre le mรชme rรฉsultat pour les paramรจtres donnรฉs

Exemple :

Function Pure(a,b)
{
	return a+b;
}

Fonctions impures

Lโ€™impur fonctionne exactement ร  lโ€™opposรฉ du pur. Ils ont des entrรฉes ou des sorties cachรฉes ; cela sโ€™appelle impur. Les fonctions impures ne peuvent pas รชtre utilisรฉes ou testรฉes isolรฉment car elles ont des dรฉpendances.

Exemple

int z;
function notPure(){
	z = z+10;
}

Composition des fonctions

La composition de fonctions consiste ร  combiner 2 fonctions ou plus pour en crรฉer une nouvelle.

ร‰tats partagรฉs

Les รฉtats partagรฉs sont un concept important dans la programmation POO. Fondamentalement, il s'agit d'ajouter des propriรฉtรฉs aux objets. Par exemple, si un disque dur est un objet, la capacitรฉ de stockage et la taille du disque peuvent รชtre ajoutรฉes en tant que propriรฉtรฉs.

Side Effects

Les effets secondaires sont tout changement d'รฉtat qui se produit en dehors d'une fonction appelรฉe. L'objectif principal de tout langage de programmation FP est de minimiser les effets secondaires, en les sรฉparant du reste du code logiciel. Dans la programmation FP, il est essentiel d'รฉliminer les effets secondaires du reste de votre logique de programmation.

Les avantages de la programmation fonctionnelle

  • Vous permet d'รฉviter les problรจmes de confusion et les erreurs dans le code
  • Plus facile ร  tester et ร  exรฉcuter les tests unitaires et ร  dรฉboguer le code FP.
  • Traitement parallรจle et concurrence
  • Dรฉploiement de code chaud et tolรฉrance aux pannes
  • Offre une meilleure modularitรฉ avec un code plus court
  • Augmentation de la productivitรฉ du dรฉveloppeur
  • Prend en charge les fonctions imbriquรฉes
  • Constructions fonctionnelles comme Lazy Map & Lists, etc.
  • Permet une utilisation efficace du Lambda Calculus

Limites de la programmation fonctionnelle

  • Le paradigme de la programmation fonctionnelle n'est pas facile, il est donc difficile ร  comprendre pour le dรฉbutant
  • Difficile ร  maintenir car de nombreux objets รฉvoluent au cours du codage
  • Nรฉcessite beaucoup de moqueries et une configuration environnementale approfondie
  • La rรฉutilisation est trรจs compliquรฉe et nรฉcessite une refactorisation constante
  • Les objets peuvent ne pas reprรฉsenter correctement le problรจme

Programmation fonctionnelle vs programmation orientรฉe objet

Programmation fonctionnelle POO
FP utilise des donnรฉes immuables. La POO utilise des donnรฉes Mutables.
Suit le modรจle basรฉ sur la programmation dรฉclarative. Suit le modรจle de programmation impรฉratif.
Il se concentre sur : ยซ Ce que vous faites. au programme. ยป Il se concentre sur ยซ Comment vous effectuez votre programmation ยป.
Prend en charge la programmation parallรจle. Aucun support pour la programmation parallรจle.
Ses fonctions n'ont aucun effet secondaire. La mรฉthode peut produire de nombreux effets secondaires.
Le contrรดle de flux est effectuรฉ ร  l'aide d'appels de fonction et d'appels de fonction avec rรฉcursion. Le processus de contrรดle de flux est effectuรฉ ร  l'aide de boucles et d'instructions conditionnelles.
L'ordre d'exรฉcution des dรฉclarations n'est pas trรจs important. L'ordre d'exรฉcution des dรฉclarations est important.
Prend en charge ร  la fois ยซ Abstraction sur les donnรฉes ยป et ยซ Abstraction sur le comportement ยป. Prend en charge uniquement ยซ Abstraction sur les donnรฉes ยป.

Conclusion

  • La programmation fonctionnelle ou FP est une faรงon de penser la construction de logiciels basรฉe sur certains principes fondamentaux de dรฉfinition.
  • Les concepts de programmation fonctionnelle se concentrent sur les rรฉsultats et non sur le processus
  • L'objectif de tout langage FP est d'imiter les fonctions mathรฉmatiques
  • Quelques langages de programmation fonctionnels les plus importants : 1) Haskell 2) SM 3) Clojure 4) Scala 5) Erlang 6) Clean
  • Une ยซ fonction pure ยป est une fonction dont les entrรฉes sont dรฉclarรฉes comme entrรฉes et aucune dโ€™entre elles ne doit รชtre masquรฉe. Les sorties sont รฉgalement dรฉclarรฉes comme sorties.
  • Les donnรฉes immuables signifient que vous devriez facilement pouvoir crรฉer des structures de donnรฉes au lieu de modifier celles qui existent dรฉjร .
  • Vous permet d'รฉviter les problรจmes de confusion et les erreurs dans le code
  • Le code fonctionnel n'est pas facile, il est donc difficile ร  comprendre pour le dรฉbutant
  • FP utilise des donnรฉes immuables tandis que la POO utilise des donnรฉes mutables

Rรฉsumez cet article avec :