Forces de la programmation fonctionnelle





Hé! Je m'appelle Katerina et j'ai les sentiments les plus chaleureux pour la programmation fonctionnelle, j'utilise le langage fonctionnel de façon continue et j'enseigne même un peu.



Notre principal langage de développement chez Typeable est Haskell, et alors que tout le monde se disputait si Haskell était prêt pour la production, nous l'avons simplement utilisé et l'avons considéré comme un avantage concurrentiel. Nous aimerions partager notre avis sur la base de cette expérience.



Comment FP améliore la programmation



La programmation fonctionnelle est assez populaire en ce moment, et les éléments FP ont commencé à apparaître dans de nombreux langages impératifs, tels que les fonctions lambda, l'application partielle (currying), les fonctions d'ordre supérieur (carte, filtre, convolutions). Quelque part, ces emprunts semblent bons, mais quelque part ils conduisent à une syntaxe étrangère plutôt étrange. Mais le paradigme de programmation est une approche qui vit dans la tête du programmeur et qui ne fait pas, en général, partie du langage. À un degré ou à un autre, n'importe quel langage prend en charge différents paradigmes, et ses conceptions permettent de développer des programmes dans différents styles. La question de savoir si cela vaut la peine de développer dans un style fonctionnel est une question ouverte, et chaque développeur y répond en fonction de ses préférences, de ses capacités linguistiques et d'autres considérations.



Nous pensons que l'utilisation du style fonctionnel dans les langages impératifs, ou mieux encore, un langage fonctionnel, en particulier les langages à typage statique, aidera à rendre le code bien meilleur, à savoir:



  1. Le code deviendra plus concis et expressif. L '«expressivité» peut être définie comme le nombre d'idées par unité de code, et en général, les langages fonctionnels, étant de niveau supérieur, sont également plus expressifs. Par exemple, la transformation de chaque élément d'un tableau ou d'une liste se fait dans un one-liner fonctionnel (en utilisant map / foreach / n'importe quoi et une fonction anonyme), alors que dans un style impératif il faudrait organiser une boucle, déclarer une variable pour un compteur ou un itérateur, et utilisez une affectation explicite. Pour des exemples plus complexes, la différence d'expressivité ne fait qu'augmenter.
  2. . « » . , . , , , - , : , (, ) , . , . ( ), « » . , , , . (working memory), , . , . — . , , C, SOLID GoF-, , , .



  3. . — , . : , , . , , , ? . «» , , « ».
  4. Le code deviendra plus facile à déboguer et à tester. Ce point découle des deux précédents: nous avons un ensemble de petites fonctions, dont certaines sont pures, i.e. on sait que leur résultat ne dépend que de l'entrée. Le code devient plus facile à déboguer - il vous suffit de vérifier ce que les fonctions utilisées renvoient séparément pour comprendre comment elles fonctionneront ensemble. Il est tout aussi simple d'écrire des tests unitaires pour la logique «propre» de votre application. 


Comment FP améliore le programmeur









Ensuite, je voudrais partager mon expérience qui n'est pas directement liée à l'écriture de programmes dans des langages fonctionnels, et vous dire quelles autres connaissances et utilisations de la PF m'ont été utiles et peuvent vous être utiles:



  1. , -. - , . , «» « » , , . , : , , Haskell, Brainfuck, Piet. . , .
  2. , , computer science. , . , , - , , .
  3. . , « » , , . , . , . , , , . , , - , - , . , , .
  4. : Haskell! , Haskell, . , Haskell-, . - . «» «» , , . , , «Haskell-». , , . , , . . , , , , . , , , . , : — ! 


Conclusion



L'avènement des éléments FP dans les langages de développement industriel populaires tels que Python, C ++, Kotlin, Swift, etc., confirme que cette approche est vraiment utile et a des atouts. L'application du style fonctionnel permet un code plus robuste qui est plus facile à séparer, à généraliser et à tester, quel que soit le langage de programmation. Bien sûr, un langage fonctionnel vous permet de profiter pleinement de ces avantages en fournissant des constructions naturelles avec un haut degré d'expressivité.



Il existe un grand nombre de langages fonctionnels, mais, comme il nous semble, pour le moment, les plus pratiques et les plus utiles pour le développement sont ceux qui utilisent le typage statique. Cela vous permet de détecter de nombreuses erreurs lors de la compilation et d'exprimer une partie de la logique d'application au niveau du type.



En conclusion, je souhaite que tout le monde n'ait pas peur d'utiliser des approches alternatives et de les essayer dans la pratique, même si cela sera utile uniquement pour votre développement personnel.



All Articles