Pourquoi vous devriez penser à la programmation fonctionnelle

Bonjour, Habr! Je vous présente la traduction de mon article «Pourquoi penser à la programmation fonctionnelle» , consacré à la programmation fonctionnelle.

image

Pourquoi devriez-vous penser à la programmation fonctionnelle? Répondons aux questions suivantes:

  • Vos projets sont-ils toujours à l'heure?
  • Les utilisateurs ont-ils eu des plaintes?
  • Le soutien au projet a-t-il déjà pris du temps?
  • Les nouvelles fonctionnalités correspondent-elles toujours bien à l'architecture existante?

Si les réponses à toutes les questions ci-dessus sont positives, vous n'avez rien à changer, votre équipe est un exemple rare de personnel, de méthodologie et d'outils harmonieux. Sinon, vous devriez être ouvert à de nouvelles approches pour résoudre vos problèmes, y compris un regard critique sur le matériel et les langages de programmation utilisés.

Premier coup d'oeil


Comme vous le savez, les programmeurs sont des gens extrêmement créatifs, mais en même temps, ils ont tendance à suivre certaines tendances lors du choix d'un langage de programmation. Parmi un grand nombre de langues, les langues fonctionnelles deviennent de plus en plus populaires auprès des fans, et les entreprises du monde entier les utilisent avec plus de confiance. L'utilisation de langages fonctionnels peut augmenter considérablement la productivité et la qualité du travail des programmeurs. Naturellement, cela dépend d'une combinaison de tâches, de compétences linguistiques et de programmation. Dans ce cas, le programmeur décrit simplement ce qu'il veut, au lieu de lister la séquence d'actions nécessaires pour obtenir le résultat. Ainsi, le développeur se concentre sur le haut niveau «ce qui est requis» au lieu d'être bloqué sur le bas niveau «comment le faire».

La programmation fonctionnelle est le style d'écriture de programmes en compilant un ensemble de fonctions. Son principe de base est d'envelopper presque tout dans une fonction, d'écrire de nombreuses petites fonctions réutilisables, puis de les appeler l'une après l'autre. De plus, la structure de ces fonctions doit respecter certaines règles et résoudre certains problèmes.

Donc, si un problème peut être résolu en combinant les appels à plusieurs fonctions, alors:

  1. Comment implémenter les conditions if-else?
  2. Comment résoudre des astuces avec Null Exception?
  3. Comment s'assurer que la fonction est vraiment «réutilisable» et peut être utilisée n'importe où?
  4. Comment s'assurer que les données transférées vers nos fonctions sont modifiées et peuvent être utilisées dans d'autres endroits?
  5. Si une fonction prend plusieurs valeurs, mais lorsqu'elle est combinée dans une chaîne, vous ne pouvez transmettre qu'une seule fonction, alors comment intégrer cette fonction à la chaîne?

Pour résoudre tous ces problèmes, les langages fonctionnels fournissent des outils et des solutions mathématiques, comme les monades, les foncteurs, etc.

Les avantages de la programmation fonctionnelle sont depuis longtemps reconnus par le grand public. Un développement logiciel réussi se résume souvent à une simplification des mécanismes existants qui permettent aux nouvelles applications de s'adapter aux exigences des utilisateurs modernes. Et en même temps, nous devons nous dépêcher, ayant réussi à présenter des produits aux clients avec des possibilités illimitées en peu de temps. Les exigences changeantes sont beaucoup plus faciles à suivre lorsque les applications développées peuvent être divisées en plusieurs fonctions simples et faciles à tester. De tels algorithmes n'ont pas d'effets secondaires délicats et de formulations abstraites destinées à des résultats à l'échelle mondiale.

Alors pourquoi les experts négligent-ils si longtemps la programmation fonctionnelle? Et pourquoi devient-elle si courante aujourd'hui?

Où la programmation fonctionnelle est-elle utilisée dans le monde réel?


La programmation fonctionnelle étant avant tout une approche de l'écriture de code, vous pouvez utiliser ses principes dans n'importe quel langage. Cependant, il existe des langages spécialement affinés par une approche fonctionnelle. Les langages fonctionnels plus modernes comme Elm et Elixir, selon GitHub et Stack Overflow, gagnent progressivement et en toute confiance en popularité. La popularité croissante de JavaScript a également accru l'intérêt pour les concepts de programmation fonctionnelle à utiliser dans ce langage. De plus, des développeurs expérimentés dans le domaine de la programmation fonctionnelle ont par la suite commencé à travailler sur les environnements Single Web Application - SPA, et en conséquence, nous avons Redux, React, MobX et d'autres bibliothèques utilisées par des millions de personnes.

image

Exemples concrets:

  • Étincelle Apache
  • Échaudure (de Twitter)
  • Apache kafka
  • Finagle (de Twitter)
  • Aka
  • Autocad
  • emacs (LISP)

Alors, quelle est la programmation fonctionnelle, d'où vient un tel boom et pourquoi devrait-il être envisagé? Voyons cela.

À propos de la programmation fonctionnelle


Il y a quelques années, seuls quelques experts avaient une idée de la programmation fonctionnelle, mais au cours des trois dernières années, presque chaque base de code de grandes applications a activement utilisé des idées tirées du monde de la programmation fonctionnelle. Et il y a des raisons objectives à cela:

  • la programmation fonctionnelle vous permet d'écrire du code plus concis et prévisible
  • c'est plus facile à vérifier (bien que l'apprentissage à partir de zéro ne soit pas facile)

Principales caractéristiques du développement de logiciels utilisant une programmation fonctionnelle


  • La fonction de nettoyage est très simple. Il doit toujours retourner le même résultat. Avec les mêmes valeurs de X et Y, on obtient toujours le même résultat de la fonction. La prévisibilité joue un rôle important lors de l'exécution du programme dans la programmation fonctionnelle.
  • Évitez les conditions générales, les données volatiles et les effets secondaires;
    Un objet immuable est un objet dont l'état ne peut pas être modifié après sa création. Les objets immuables sont plus orientés thread que les objets mutables. Si la fonction ne fonctionne pas de manière prévisible, cela entraînera des effets secondaires indésirables. Dans les langages impératifs, une fonction du processus d'implémentation peut lire et modifier les valeurs des variables globales et effectuer des entrées / sorties. Par conséquent, si nous appelons deux fois la même fonction avec le même argument, il peut arriver que nous obtenions deux résultats différents. Cette fonction est appelée effet secondaire.

    La programmation fonctionnelle nous aide à écrire du code orienté thread.
  • La prévalence d'une approche déclarative plutôt qu'impérative.

Composition des fonctions


La composition de fonctions est une approche de programmation fonctionnelle qui implique d'appeler certaines fonctions comme arguments d'autres pour créer une composition complexe de fonctions plus simples. Cette méthode de mise en page vous permet de prendre deux fonctions simples ou plus et de les combiner en une fonction plus complexe qui exécute des sous-fonctions dans un ordre logique avec toutes les données. Pour obtenir ce résultat, vous mettez une fonction à l'intérieur d'une autre et effectuez des opérations avec des fonctions externes sur le résultat de la fonction interne jusqu'à ce que vous obteniez le résultat. Et le résultat peut être différent, selon l'ordre dans lequel les fonctions sont appliquées.

Par conséquent, avec un ordre logique différent d'appeler des fonctions pures et la même valeur de l'argument, nous obtiendrons une fonctionnalité plus complexe qui nous donnera le résultat souhaité et le rendra prévisible.

image

Avantages de la programmation fonctionnelle


La programmation fonctionnelle aide à rendre le code plus facile à comprendre, prévisible et plus facile à lire. L'utilisation des principes de la programmation fonctionnelle permet de se débarrasser des abstractions inutiles avec un comportement imprévisible, afin de rendre le programme plus prévisible et de réduire le nombre d'erreurs possibles.

Dans les langages fonctionnels, les fonctions peuvent être passées à d'autres fonctions en tant qu'argument ou retournées en conséquence. Les fonctions qui prennent des arguments fonctionnels sont appelées fonctions d'ordre supérieur ou fonctionnelles. La caractéristique la plus populaire est la carte. une carte qui applique une certaine fonction à tous les éléments de la liste, formant une autre liste à partir des résultats.

Dans la programmation purement fonctionnelle, l'opérateur d'affectation est absent, les objets ne peuvent pas être modifiés et détruits, de nouveaux ne peuvent être créés qu'en décodant et synthétisant ceux existants. Le garbage collector intégré s'occupera des objets inutiles. Pour cette raison, dans un langage fonctionnel pur, toutes les fonctions sont exemptes d'effets secondaires. Cependant, cela n'empêche pas ce langage de mimer certaines propriétés impératives utiles, telles que les exceptions et les tableaux mutables. Bien sûr, il existe des astuces spéciales pour cela.

Inconvénients de la programmation fonctionnelle


  • L'un des problèmes de la programmation fonctionnelle est qu'elle est différente de ce que vous connaissez déjà. Vous devez réapprendre beaucoup de ce que vous savez déjà dans un cadre impératif! De nombreux développeurs expérimentés qui savent déjà ce qu'ils savent ne résoudront pas les problèmes différemment. Il faut du temps et des efforts pour penser différemment.
  • Il est facile d'écrire des fonctions propres, mais les combiner dans une application complète rend les choses plus compliquées.
  • Gros problème avec des performances prévisibles. L'utilisation de valeurs immuables et de récursivité peut potentiellement entraîner des problèmes de performances, y compris l'utilisation et la vitesse de la RAM, de sorte que la plupart des langages fonctionnels ne sont pas un bon choix pour les systèmes temps réel mous ou durs ou l'informatique embarquée.
  • La programmation fonctionnelle a tendance à écrire du code sous une forme trop abstraite lorsque le programmeur lui-même ne comprend plus ce qu'il a écrit après un certain temps.
  • Les fonctions pures et les E / S ne sont pas vraiment mélangées.

Conclusion


S'il vous semble, ainsi qu'à votre équipe de développement, que votre style de codage ne vous donne pas le niveau nécessaire de gestion de la complexité dans votre domaine d'activité, obstruant votre code avec une syntaxe inutile, ce qui entraîne une perte de temps, essayez la programmation fonctionnelle. Ainsi, dans des domaines liés à un grand nombre de calculs ou de transformations de données, à la programmation parallèle / asynchrone, vous pouvez bénéficier d'avantages significatifs, immergés dans la programmation fonctionnelle.

L'écriture de code dans un langage fonctionnel vous donne la possibilité d'examiner le problème sous un angle différent, où le développement de votre solution peut être plus efficace. Et cela augmentera simplement le nombre de façons d'exprimer vos idées.

Lorsque vous développez votre solution en utilisant le paradigme de programmation fonctionnelle, vous accélérerez de plus en plus rapidement l'ensemble du processus de développement, devenant de plus en plus expérimenté. Il semble que vous conduisiez votre voiture à grande vitesse, par rapport à la façon dont les programmeurs se déplacent impérativement.

La programmation fonctionnelle peut changer votre style de codage pour le mieux. Mais la maîtriser est assez difficile et prend du temps, et de nombreux articles et tutoriels ne prennent pas en compte les détails (par exemple, les monades, les foncteurs applicatifs, etc.) et ne donnent pas d'exemples pratiques qui aideraient les débutants à utiliser quotidiennement de puissantes méthodes de programmation fonctionnelle. Mais vous pouvez attirer des programmeurs expérimentés dans l'équipe, ce qui vous fera économiser temps, efforts et argent.

image

Si vous faites tout correctement, le résultat sera plus compréhensible, concis et vous aurez un code lisible. N'est-ce pas ce que nous voulons tous?

Roman Taluev,
Développeur logiciel Quasarbyte

Source: https://habr.com/ru/post/fr438396/


All Articles