Caractéristiques de programmation fonctionnelle, exemples, avantages, inconvénients

Caractéristiques de programmation fonctionnelle, exemples, avantages, inconvénients

La Programmation fonctionnelle Il correspond au modèle de programmation basé sur le concept d'énoncé la procédure d'un programme en tant que modèle fonctionnel mathématique plutôt que comme des séquences d'instructions explicites à un processeur, qui est le concept principal de la programmation impérative.

Le langage fonctionnel met l'accent sur les phrases et les termes au lieu d'exécuter des instructions. Dans ce programme, le résultat dépendra uniquement des paramètres qui sont transmis à une fonction, contrairement à d'autres types qui obéissent à un état local ou mondial.

Comment fonctionne la fonction de cartographie dans le langage de programmation fonctionnelle Haskell. Source: par Pluke - Propre travaux, CC0 Commons.Wikimedia.org.

Son nom provient de fonctions mathématiques, qui sont l'allocation d'un ensemble d'entrées à un ensemble de sorties. Une fonction mathématique ne fonctionne vraiment pas, mais décrit le modèle d'un processus, expliquant à travers une formule ce qu'un ensemble d'entrées produit dans une fonction.

[TOC]

Idées de base

Le fondement sur lequel était basé la programmation fonctionnelle était le calcul de Lambda, qui a été développé au cours de la troisième décennie du XXe siècle pour définir et appliquer des fonctions. Lisp a été le premier langage de programmation de ce type, conçu en 1960.

Bien que la plupart des langages de programmation consistent en des entrées externes, des sorties et des variables qui peuvent être configurées ou utilisées à partir de fonctions, la programmation fonctionnelle l'empêche. L'idée est que chaque fois qu'une fonction est appelée avec les mêmes paramètres, il doit renvoyer la même valeur.

Caractéristiques

Les langages de programmation fonctionnelle sont appelés applications, car les fonctions s'appliquent à leurs paramètres, en plus de déclaratif et non procédural, car les définitions spécifient ce que vous voulez calculer et non comment il est calculé.

Fonctions pures

Une fonction est pure lorsqu'elle n'a pas d'effets secondaires observables, tels que l'altération des variables externes, les modifications du système de fichiers, etc.

Ces fonctions sont considérées comme convaincantes, car elles ne changeront expressément aucune variable sur laquelle d'autres parties du code pourraient dépendre à un moment donné. Il semble inconfortable de codifier avec ces restrictions, mais il convient de considérer que ces fonctions sont déterministes, prévisibles et composables.

Fonctions de première classe

Les fonctions sont considérées comme des valeurs qui peuvent être affectées aux variables, afin qu'elles puissent les transmettre et revenir d'autres fonctions. C'est-à-dire qu'une fonction peut être utilisée comme s'il s'agissait d'un paramètre ou comme valeur qui est retournée.

Cela implique que la fonction peut être transmise en tant que telle, au lieu du résultat de la fonction. Par exemple, considérez la fonction double (x), qui renvoie deux fois la valeur de son paramètre d'entrée. Ainsi, le double (2) reviendrait 4.

Il peut vous servir: évolution de l'entretien industriel: de l'origine à la présente

Comme c'est une fonction de première classe, le code (double (double (2)) serait le même que le double code (4). Cela permet de nicher une fonction en tant que paramètre d'un autre et ainsi de suite.

Transparence référentielle

Il se réfère au fait que dans ce modèle de programmation, il n'y a pas de phrases d'affectation. C'est-à-dire que de nouvelles variables doivent être définies si des valeurs supplémentaires sont souhaitées. Par conséquent, l'état d'une variable est constant à tout moment.

Cela élimine la moindre possibilité d'effets indésirables, car toute variable peut être remplacée par sa valeur réelle pendant tout point d'exécution de programme.

Récursivité

Dans la programmation fonctionnelle, il n'y a pas de boucles "pour" et "while". Au lieu de cela, l'itération dépend de la récursivité. La récursivité est implémentée à l'aide de fonctions récursives, qui s'appellent de manière répétitive jusqu'à ce que le boîtier de base soit atteint.

Immutabilité

Les variables sont immuables, c'est-à-dire qu'il n'est pas possible de modifier une variable une fois qu'il a initialisé. Bien qu'une nouvelle variable puisse être créée, les variables existantes ne sont pas autorisées.

Exemples

Approches impératives et déclaratives

Avec un exemple, la différence entre ces approches peut être analysée, effectuant la même opération dans les deux dispositions, qui consiste à filtrer les nombres impairs d'une liste tandis que les nombres inférieurs à 5 sont remplacés par 5.

C'est le même calcul, avec le même résultat. Cependant, comme on peut le voir, le code impératif est détaillé et n'est pas clair immédiatement. D'un autre côté, l'approche déclarative est lisible et explicite, car elle se concentre sur ce que vous voulez obtenir.

Fonctions pures

Vous pouvez clarifier ce qui est défini comme des fonctions pures et impures avec quelques exemples de base:

Fonctions telles que les objets de première classe

Signifie utiliser des fonctions de la même manière que les données sont utilisées. Par conséquent, ils peuvent passer en tant que paramètres à une autre fonction. Dans l'exemple suivant, vous pouvez passer la fonction int en tant que paramètre à la fonction de carte:

>>> liste (map (int, [«1», «2», «3»]))

[1, 2, 3]

Ils peuvent être affectés aux variables et les retourner. Par exemple, le code suivant peut se voir attribuer la fonction hello_world, puis exécuter la variable en fonction.

avantage

- Concentrez-vous sur ce que vous voulez réaliser (déclaratif) et non comment y parvenir (impératif).

- Ils ne contiennent pas de phrases d'allocation, donc après que les variables ont donné une valeur, ils ne changeront plus. Par conséquent, les programmes fonctionnels ne contiennent pas d'effets secondaires.

Peut vous servir: catastrophes technologiques

- Le flux logique est clair, car l'État est moins dispersé et n'est pas implicitement modifié.

- Admet le concept d'évaluation différée, ce qui signifie que la valeur n'est évaluée et stockée que lorsque nécessaire.

- Comme les fonctions pures ne changent aucun état et ne dépendent complètement de l'entrée, elles sont faciles à comprendre. La valeur de retour donnée par de telles fonctions est la même que le résultat produit par eux.

- En raison de la nature des fonctions pures de la prévention des variables ou des données externes de l'évolution, la mise en œuvre de la concurrence devient efficace.

- Les fonctions sont traitées comme des valeurs, se déplaçant vers d'autres fonctions telles que les paramètres. Cela améliore la compréhension et la lisibilité du code.

- Les fonctions pures prennent les paramètres une fois, produisant une sortie immuable. En utilisant des valeurs inaltérables, la purification et les tests sont facilitées.

Plus court et plus facile à comprendre

Ils sont plus courts et plus faciles à comprendre que les impératifs. Des études ont montré que la productivité moyenne du programme.

Aucun flux de contrôle

Lorsque vous appelez une fonction, vous ne pouvez pas avoir un effet différent du calcul de son résultat. Cela exclut une source importante d'erreurs, ce qui rend également l'ordre d'exécution sans rapport, car aucun effet secondaire ne peut modifier la valeur d'une expression, pouvoir être évalué à tout moment.

Le programmeur est apaisé le fardeau de l'établissement d'un flux de contrôle. Comme les expressions peuvent être évaluées à tout moment, les variables peuvent être remplacées par leurs valeurs.

Cette autonomie favorise que les programmes fonctionnels sont plus gérables mathématiquement que les programmes conventionnels.

Désavantages

- Le paradigme de programmation fonctionnelle n'est pas simple, il devient donc difficile à comprendre pour un débutant.

- Il est difficile à maintenir, car lors du codage de nombreux objets évoluent.

- Dans certains cas, lors de l'écriture de fonctions pures, une réduction de la lisibilité du code est causée.

- Les valeurs immuables en combinaison avec la récursivité peuvent entraîner une réduction drastique des performances du système.

- La réutilisation est très compliquée et nécessite une refactorisation constante.

- Les programmes d'écriture avec un style récursif au lieu d'utiliser des liens ou des boucles pourraient être une tâche très décourageante.

- Les objets peuvent ne pas représenter correctement le problème.

Il peut vous servir: 50 blogs de jeux vidéo recommandés

- Bien que l'écriture de fonctions pures se révèle simple, les combiner avec le reste de l'application et avec les opérations d'entrée / sortie est assez difficile

Applications

Le programme d'intelligence artificielle est réalisé dans les langages de programmation fonctionnelle et les techniques d'intelligence artificielle migrent vers des applications réelles.

Se démarque également dans la mise en œuvre de modèles mathématiques complexes. Pour cette raison, l'une des principales utilisations des langues fonctionnelles a été traditionnellement académique. Il est utile pour développer des spécifications exécutables et des implémentations prototypes.

De nombreux langages fonctionnels se distinguent également pour implémenter un traitement parallèle. Cela est dû à sa capacité à profiter des fonctions pures, qui renvoient toujours la même valeur quel que soit l'ordre dans lequel ils sont exécutés.

Méthodologie fonctionnelle

WhatsApp utilise le langage de programmation ERLAG, qui suit le modèle de programmation fonctionnelle, permettant à plus d'une centaine de ses employés de gérer les données appartenant à environ 1.600 millions de personnes.

Un autre porteur important du style de programmation fonctionnelle est Haskell. Il est utilisé par Facebook dans votre système antipam. Même JavaScript, l'un des langages de programmation les plus utilisés, possède les propriétés d'un langage fonctionnel dynamique.

Langues qui prennent en charge la programmation fonctionnelle

D

Il a été conçu après C ++, obtenant tous ses avantages tout en éliminant ses faiblesses observées pour avoir à être compatible avec C.

Erlang

Il est très évolutif et simultané, ce qui le rend idéal pour les télécommunications et autres applications qui reçoivent des quantités massives de données dans un ordre imprévisible.

Haskell

Ceci est un langage de programmation fonctionnelle pure, qui utilise le calcul de Lambda pour lui.

Ml

Il est utilisé dans les types de types mathématiques, scientifiques, financiers, analytiques et autres. L'une de ses forces est de créer un logiciel pour gérer d'autres programmes.

CAML objectif

C'est une langue open source qui est basée sur CAML. Il a tendance à créer des programmes très légers, les aidant à être chargés et exécutés plus rapidement que ceux créés par d'autres langues.

Schème

Il est basé sur la syntaxe LISP et la structure des algols. Grâce à sa simplicité, il est utilisé dans de nombreux cours informatiques comme une introduction à la conception de programmes pour montrer certaines des fondements de la programmation informatique.

Les références

  1. Whho organise ceci (2019). Apprendre la programmation fonctionnelle: ce style de codage vous épousera l'esprit. Pris de: whoisostingthis.com.
  2. Andrea Bertoli (2019). Une introduction adéquate au programme fonctionnel. Pris de: dev.pour.
  3. Hacker Earth (2020). Programmation fonctionnelle. Pris de: Hakereph.com.
  4. Clojure (2020). Programmation fonctionnelle. Pris de: Clojure.org.
  5. Akhil Bhadwal (2020). Programmation fonctionnelle: concepts, avenages, inconvénients et applications. Hackr. Pris de: hackr.Io.
  6. Guru99 (2020). Qu'est-ce que la programmation fonctionnelle? Avec un exemple de tutoriel. Tiré de: Guru99.com.