Voici une traduction amateur d' un essai d' Eric Normand, consultant et conférencier faisant la promotion de la programmation fonctionnelle.
J'étais assez libre avec les termes, n'ai pas hésité à utiliser l'anglais comme une "fonctionnalité". Je suis confus par la traduction littérale des termes du programmeur. Bonne lecture
Résumé: nous répondons directement à la question, mais ensuite nous analysons les préjugés cachés derrière elle.
Très souvent, des développeurs expérimentés me demandent: "Qu'est-ce que la programmation fonctionnelle peut me donner que je n'ai pas? Puis-je commencer à utiliser FP dans mon propre langage?" C'est une excellente question, j'espère pouvoir y répondre de manière décente.
Je comprends parfaitement l'apparence de ce problème. JavaScript a une map
, filter
et reduce
. Java 8 a des flux ( j'ai décidé d'utiliser l' anglais au lieu du mot "flux" - environ Translator ). Il semble que chaque langue reçoive de plus en plus de fonctionnalités fonctionnelles, dont structures de données immuables , fonctions de premier ordre, composition des fonctions, déstructuration et bon typage.
Et je suis d'accord: vous pouvez utiliser FP dans n'importe quelle langue .
La programmation fonctionnelle n'est qu'un paradigme. Tout comme vous pouvez écrire dans un style procédural, orienté objet ou logique dans n'importe quelle langue, vous pouvez écrire dans un style fonctionnel dans n'importe quelle langue.
Attends une minute. Telle est la réponse à la question. Mais est-ce aussi simple que cela?
Demandez-vous: puis-je utiliser la POO en C? D'après ce que j'ai dit plus haut, la réponse est oui. De plus, j'ai déjà fait des petits systèmes d'objets en C plus tôt. Mais pourquoi ai-je alors besoin d'un langage orienté objet si je peux utiliser des objets en C? J'avais l'impression que mon système d'objets me fournissait toutes les fonctionnalités nécessaires pour la POO. Mais voici une autre question: pourrais-je utiliser la POO en C sans connaître la POO? J'en doute.
Ces paradigmes sont appelés paradigmes parce que ce sont des approches holistiques pour résoudre les problèmes. La POO divise la tâche en objets qui interagissent les uns avec les autres par le biais de messages. FP représente une tâche sous forme de données qui affiche l'état d'un processus simulé. L'approche procédurale décrit la solution comme un ensemble d'étapes claires. Chaque paradigme offre une manière différente de résoudre le problème. Si vous pensez que vous pouvez utiliser FP en Java sans être spécialiste en FP, vous dites que la programmation fonctionnelle n'est pas un paradigme, mais juste un ensemble de fonctionnalités (données immuables, fonctions pures, leur composition, etc.).
Je l'ai rencontré plusieurs fois. Les gens prétendent écrire dans un style fonctionnel en JavaScript. En fait, ils utilisent simplement la map
et la reduce
couplés à un certain nombre de fonctions pures . Et cela donne de bons résultats, mais en général, leur code est procédural. Ils n'ont pas étudié un paradigme, mais seulement ses caractéristiques.
L'avantage d'un langage qui impose rigoureusement un paradigme est qu'il vous apprend à utiliser cette approche pour résoudre des problèmes. Et plus il l'impose, plus souvent vous devrez essayer de résoudre le problème dans le cadre de ce paradigme. Plus votre langage est fonctionnel, plus vous vous entraînerez à utiliser une approche fonctionnelle pour résoudre les problèmes. Il en va de même pour la POO et le style procédural. En bref, vous vous entraînez en ne pouvant pas utiliser les approches auxquelles vous êtes habitué.
Permettez-moi de faire une déclaration encore plus controversée: en dehors des langages qui sont fonctionnels (Clojure, Haskell, Elm, Scala, Erlang, etc.), peu de FP sont utilisés. Sauf lorsque les développeurs connaissent déjà le style fonctionnel, grâce à la riche expérience, ils n'utilisent que des miettes de ce que le paradigme offre. Et ils manquent la chose la plus importante: l'opportunité de regarder la tâche sous un angle différent.
Je ne dis pas qu'il est impossible d'apprendre réellement la PF en utilisant JavaScript, mais cela nécessitera de l'autodiscipline et de l' aide . La langue ne vous guidera pas sur ce chemin. Vous devrez le faire vous-même ou trouver quelqu'un qui pourra vous aider.
Conclusion
Tous les paradigmes sont excellents car "un point de vue équivaut à 80 points de QI . " Vous pouvez utiliser n'importe quel paradigme dans n'importe quelle langue. Mais il est très difficile d'étudier le paradigme sans s'y plonger. Et c'est assez difficile de plonger sans utiliser la langue qui l'impose. Jusqu'à ce que vous fassiez cela, vous utiliserez les fonctionnalités du paradigme, mais ne résoudrez pas les problèmes d'une manière nouvelle. En général, la programmation fonctionnelle n'est pas un ensemble de fonctionnalités. Si vous voulez l'apprendre, plongez-vous dedans.