Dans quelles situations devrais-je choisir d'utiliser un langage de programmation fonctionnel plutôt qu'un langage orienté objet plus verbeux comme C ++, C # ou Java?
Je comprends ce qu'est la programmation fonctionnelle, ce que je ne comprends pas vraiment, c'est pour quels types de problèmes est-ce une solution parfaite?
functional-programming
language-agnostic
Alex Baranosky
la source
la source
Réponses:
Les langages fonctionnels sont, à mon avis, bons pour principalement deux choses: les IA de jeu et les calculs mathématiques. C'est bon dans les IA de jeu en raison de ses jolies manipulations de liste (au moins en Lisp et Scheme), et pour les calculs mathématiques en raison de sa syntaxe. Scheme, Lisp et Haskell ont une syntaxe qui facilite la lecture des calculs mathématiques. La dernière chose que je dois ajouter est que les langages fonctionnels sont des langages vraiment amusants. Mon cours Scheme était l'un des cours avec lesquels je me suis le plus amusé.
la source
J'ai fait moi-même quelques recherches à ce sujet et j'ai pensé que je pourrais ajouter CONCURRENCY à la liste des raisons d'utiliser un langage fonctionnel. Voir à un moment donné dans un proche avenir, la vitesse du processeur ne pourra pas augmenter en utilisant la même technologie de processeur. La physique de l'architecture ne le permettra pas.
C'est donc là qu'intervient le traitement simultané.
Malheureusement, la plupart des langages POO ne peuvent pas tirer parti de plusieurs processeurs à la fois en raison des interdépendances entre les données.
Dans les langages de programmation purement fonctionnels, l'ordinateur peut exécuter deux (ou plusieurs autres) fonctions à la fois car ces fonctions ne modifient pas les informations d'état extérieures.
Voici un excellent article sur la programmation fonctionnelle que vous pourriez apprécier.
la source
Un de mes amis a cité l'un de ses professeurs d'université disant quelque chose comme ceci:
Ma réponse est que la FP est une approche totalement viable de la programmation avec une gamme d'applications aussi large que l'OO. Comme pour toute discussion sur le choix du langage de programmation, je pense que les questions les plus importantes sont:
En ce qui concerne la première question, si vous faites cela principalement pour la valeur d'apprentissage, je vous suggère de regarder Haskell , en raison du large éventail de supports (livres, articles, communauté active, etc.)
En ce qui concerne la deuxième question, Haskell a une belle gamme de bibliothèques (bien que certaines soient plus matures que d'autres), mais Scala (un langage hybride OO-fonctionnel fonctionnant sur la JVM) présente les avantages que vous pouvez plus progressivement passer au style fonctionnel et vous disposez de la gamme complète des bibliothèques accessibles par Java.
la source
Pratiquement tout ce que vous pouvez faire en PP peut être fait en FP, et la même chose en sens inverse. C'est juste une autre façon de coder quelque chose - une autre perspective sur le problème et une manière différente de le résoudre.
Cependant, comme peu de gens utilisent FP, le problème est davantage le manque de bonnes bibliothèques, la portabilité / maintenabilité (puisque le responsable a une meilleure chance de comprendre quelque chose d'écrit en C ++ que Scheme), et le manque de documentation et de communauté. Je sais qu'il existe des documents, cependant, comparez cela à C ++, C # ou Java et vous comprendrez ce que je veux dire.
Cependant, si vous voulez vraiment faire FP, vous pouvez utiliser ce style même en C ++ et C #. Bien sûr, ce ne sera pas un 100% FP si vous utilisez la bibliothèque standard. Malheureusement, je ne pense pas que C # soit optimisé pour être utilisé avec la programmation fonctionnelle et cela créera probablement beaucoup de problèmes de performances.
C'est plus un post subjectif, ce que je pense de la PF. Ce n'est pas une déclaration rigoureuse.
la source
Les langages fonctionnels sont bons dans de nombreuses situations. Cela dépend des bibliothèques d'un langage fonctionnel particulier.
Comment répondriez-vous à la question "Quand utiliser un langage de programmation orienté objet?"?
la source
Bien que ce soit une question assez subjective, je voudrais juste ajouter que les langages fonctionnels sont beaucoup utilisés pour analyser les langages spécifiques à un domaine ; la nature fonctionnelle se prête bien à l'analyse des grammaires.
la source
D'après ce que j'ai vu, c'est plus une question de goût que de fonctionnalité (sans jeu de mots). Il n'y a vraiment rien dans l'un ou l'autre style de langage qui le rend intrinsèquement meilleur ou pire pour des tâches spécifiques.
la source
En général, utilisez la langue dans laquelle il est le plus facile d'exprimer la solution à un problème. Pour la programmation fonctionnelle, c'est à ce moment que la solution à un problème s'exprime facilement en termes de fonctions , d'où le nom. En général, c'est bon pour les opérations mathématiques, l'IA, la correspondance de modèles; en général tout ce qui peut être décomposé en un ensemble de règles qui doivent être appliquées pour obtenir une réponse. Vous ne pouvez vraiment déterminer le "meilleur" langage à utiliser qu'après avoir suffisamment analysé votre problème. C'est là que le pseudo-code est utile. Si vous vous retrouvez à écrire un pseudo-code qui ressemble à FP, utilisez FP.
Bien sûr, tous les langages de programmation complets sont fonctionnellement équivalents, donc peu importe celui que vous choisissez en termes de problèmes que vous pouvez résoudre. Les principaux effets seront en termes d'efficacité et de précision du codage et de facilité d'entretien.
Notez également qu'il est possible d'imiter FP dans les langages OO grâce à des API intelligemment conçues. Par exemple, j'ai vu de nombreuses bibliothèques Java (JMock en est un exemple) qui utilisent le chaînage de méthodes pour simuler un FP DSL. Ensuite, vous verrez des constructions telles que:
logger.expects(once()).method("error") .with( and(stringContains(action),stringContains(cause)) );
Cela crée essentiellement une fonction qui est évaluée pour déterminer si une séquence d'appel sur un objet fictif est correcte. (exemple volé sur http://www.jmock.org/yoga.html )
Une autre syntaxe de type FP dans les langages OO est l'utilisation de fermetures, comme dans Ruby.
la source