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
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
Mise en situation :
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