Pourquoi la programmation fonctionnelle


38

Quel est le problème avec la programmation fonctionnelle? Je vois beaucoup en parler, mais pour être honnête, je ne les ai jamais trouvées utiles. Pourquoi tant d'universités les enseignent-ils apparemment?


6
Très gros en programmation IA.
aqua

3
@aqua - cela ne devrait-il pas être une réponse, pourquoi pas?
Martin Beckett

5
J'aimerais également souligner que même les langages OO traditionnels commencent à inclure des concepts issus de la programmation fonctionnelle. Linq (en .NET), en est un exemple.
apoorv020

Je pense que la programmation fonctionnelle sollicite davantage votre cerveau et peut conduire à un code vraiment décourageant. Donc c'est plutôt cool.
Adel

2
@ apoorv020: Et les génériques, les n-uplets, le ramassage des ordures et ... sont tous originaires de langages fonctionnels.
Jon Harrop

Réponses:


60

Commencez par Pourquoi la programmation fonctionnelle est importante . Puis déplacez-vous vers Pourquoi la programmation de la fonction est importante . Quelques balles:

  • La programmation fonctionnelle vous permet de raisonner différemment sur les problèmes
  • L'abstraction fonctionnelle est très puissante et vous permet de sécher votre code de manière non disponible pour d'autres paradigmes.
  • Dans notre avenir multi-cœur, les langages fonctionnels peuvent être plus faciles à scinder en tâches simultanées (bien que les langages non strictement fonctionnels travaillent également dur sur le problème).
  • Il est plus facile de prouver que les programmes écrits dans des langages fonctionnels purs (sans effets secondaires) sont mathématiquement corrects.

5
+1 - Ce sont tous d'excellents points, et ils sont expliqués de manière plus concise et plus détaillée que ce que j'ai essayé de faire.
jmort253

1
Dans votre quatrième point, vouliez-vous dire que la langue peut être prouvée correcte ou que des programmes sont écrits dans la langue? Quoi qu'il en soit, on peut prouver que les langages impurs et les programmes écrits dans des langages impurs sont corrects, mais que c'est beaucoup plus difficile et désordonné.
Jörg W Mittag

1
@ Jörg W Mittag, il est beaucoup plus facile de raisonner sur les propriétés du langage lui-même. La sémantique dénotationnelle est triviale pour les langages fonctionnels et assez compliquée pour l'impératif.
SK-logic

C'est drôle de voir comment le second lien fournit des arguments "explicites", sachant que je ne lis même pas le premier lien.
jokoon

+1: bonne réponse. J'aime particulièrement la façon dont vous mettez les mots points n ° 1 et n ° 2.
Jim G.

9

Les concepts de programmation fonctionnelle constituent une base qui changera votre façon de penser et vous aidera à résoudre les problèmes du monde réel.

Le concept est similaire aux raisons pour lesquelles nous apprenons tous le génie informatique en calcul multi-variable, en algèbre et / ou en physique, même si nous n’avons peut-être jamais besoin de cette connaissance spécifique au cours de notre carrière.

C'est pourquoi les facultés de droit adorent les candidats titulaires d'un baccalauréat en mathématiques. Etudier les mathématiques vous apprend à penser à plusieurs concepts de manière logique, tandis que la programmation fonctionnelle vous apprend des abstractions et de nombreux autres concepts importants qui vous aident à résoudre les problèmes et à les examiner sous un angle différent.

En résumé, la programmation fonctionnelle vous aide à apprendre à apprendre.


Peut-être qu'il n'a pas vraiment besoin d'un nom alors? N'est-ce pas simplement une conception «correcte» du programme?

4

Lorsque vous commencez, la programmation fonctionnelle est le meilleur modèle de pensée. Parce que la plupart de vos programmes ne nécessiteront pas l'orientation objet. Au moins ça a été mon expérience.

Cependant, maintenant que je me lance dans certaines applications qui nécessitent une séparation de l'affichage et de la logique, c'est à ce moment-là que j'ai commencé à séparer toute la logique et le code d'affichage, afin de faciliter la tâche de chaque utilisateur.

Mais vous ne saurez pas pourquoi faire cela, à moins que vous maîtrisiez d'abord Functional. Je n'ai jamais aimé que les gens me bousculent OO, ou que OO soit la solution pour tout. Assurez-vous simplement que, quelle que soit l'approche choisie, cela soit logique pour ce sur quoi vous travaillez et que l'apprentissage ne prenne pas trop de temps pour vous permettre de consacrer trop de temps au travail pour lequel vous êtes rémunéré.


1
+1 - J'aime que vous indiquiez la meilleure technique pour le travail: Assurez-vous que cela a du sens.
jmort253

1
Malheureusement, le sens commun est rare dans notre secteur. Parce que chacun de nous a des expériences complètement différentes, qui à cause de ses erreurs sont différentes, chacun de nous développe des habitudes différentes, et pourquoi nous les faisons eux-mêmes.
Crosenblum

"Le sens commun est la chose la plus équitablement répartie au monde, car chacun se croit si bien doté que même ceux qui sont difficiles à satisfaire dans tous les domaines ne sont pas habitués à en désirer plus qu'ils ne le font déjà avoir." - Descartes

3

Parce qu'il met l'accent sur les verbes, pas les noms. Parfois, ce sont les verbes qui importent.


OOP met l'accent sur les noms. Parfois, ce sont les noms qui importent. Comment savons-nous lequel? - Faux dilemme. Système arrêté

3

Parce qu'en général, il utilise moins de code pour accomplir la même tâche. Moins de code à écrire, moins de code à gérer. En plus d'être moins de code, il a aussi tendance à avoir moins d'état, et il est donc un peu plus simple de raisonner (une fois que vous en avez l'habitude).


Alors, n'est-ce pas simplement la définition de «meilleur»? Pourquoi voudrions-nous faire autre chose que ce que vous avez décrit?

2

Peut-être parce que les universités veulent enseigner quelque chose de tous les paradigmes de programmation, et pour certaines choses, la programmation fonctionnelle est meilleure (comme décrire le mouvement des personnages de jeu et décrire les animations)

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.