web-dev-qa-db-fra.com

Quels sont les avantages de la programmation fonctionnelle?

Quels sont, selon vous, les avantages de la programmation fonctionnelle? Et comment s'appliquent-ils aux programmeurs aujourd'hui?

Quelles sont les plus grandes différences entre la programmation fonctionnelle et la POO?

90
Rayne

Le style de programmation fonctionnelle consiste à décrire ce que vous voulez, plutôt que comment l'obtenir. c'est-à-dire: au lieu de créer une boucle for avec une variable itérateur et de parcourir un tableau en faisant quelque chose pour chaque cellule, vous diriez l'équivalent de "cette étiquette fait référence à une version de ce tableau où cette fonction a été effectuée sur tous les éléments."

La programmation fonctionnelle déplace des idées de programmation plus basiques dans le compilateur, des idées telles que la compréhension des listes et la mise en cache.

Le plus grand avantage de la programmation fonctionnelle est la brièveté, car le code peut être plus concis. Un programme fonctionnel ne crée pas de variable d'itérateur pour être le centre d'une boucle, donc cela et d'autres types de surcharge sont éliminés de votre code.

L'autre avantage majeur est la concurrence, qui est plus facile à faire avec la programmation fonctionnelle car le compilateur s'occupe de la plupart des opérations qui nécessitaient auparavant la configuration manuelle de variables d'état (comme l'itérateur dans une boucle).

Certains avantages en termes de performances peuvent également être observés dans le contexte d'un processeur unique, selon la façon dont le programme est écrit, car la plupart des langages et extensions fonctionnels prennent en charge l'évaluation paresseuse. Dans Haskell, vous pouvez dire "cette étiquette représente un tableau contenant tous les nombres pairs". Un tel tableau est infiniment grand, mais vous pouvez demander le 100 000e élément de ce tableau à tout moment sans avoir à savoir - au moment de l'initialisation du tableau - quelle est la plus grande valeur dont vous aurez besoin. La valeur ne sera calculée que lorsque vous en aurez besoin, et pas plus.

71
Chris Wenham

Le plus grand avantage est que ce n'est pas ce à quoi vous êtes habitué. Choisissez une langue comme Scheme et apprenez à résoudre les problèmes avec elle, et vous deviendrez un meilleur programmeur dans les langues que vous connaissez déjà. C'est comme apprendre une deuxième langue humaine. Vous supposez que les autres sont fondamentalement une variation par vous-même parce que vous n'avez rien à comparer avec. L'exposition aux autres, en particulier ceux qui ne sont pas liés à ce que vous savez déjà, est instructif.

27
Kirk Strauser

Pourquoi la programmation fonctionnelle est importante
http://www.cs.kent.ac.uk/people/staff/dat/miranda/whyfp90.pdf

Résumé

Comme le logiciel devient de plus en plus complexe, il est de plus en plus important de bien le structurer. Un logiciel bien structuré est facile à écrire et à déboguer, et fournit une collection de modules qui peuvent être réutilisés pour réduire les coûts de programmation futurs.

Dans cet article, nous montrons que deux caractéristiques des langages fonctionnels en particulier, les fonctions d'ordre supérieur et l'évaluation paresseuse, peuvent contribuer de manière significative à la modularité. À titre d'exemples, nous manipulons des listes et des arbres, programmons plusieurs algorithmes numériques et implémentons l'heuristique alpha-bêta (un algorithme de l'intelligence artificielle utilisé dans les programmes de jeu). Nous concluons que la modularité étant la clé d'une programmation réussie, la programmation fonctionnelle offre des avantages importants pour le développement de logiciels.

11
Robert Harvey

Un bon point de départ serait donc d'essayer de comprendre certaines choses qui ne sont pas possibles dans les langages impératifs mais possibles dans les langages fonctionnels.

Si vous parlez de calculabilité, il n'y a bien sûr rien de possible en programmation fonctionnelle mais pas impérative (ou vice versa).

Le but des différents paradigmes de programmation n'est pas de rendre les choses possibles qui n'étaient pas possibles auparavant, c'est de rendre les choses faciles qui étaient difficiles auparavant.

La programmation fonctionnelle vise à vous permettre d'écrire plus facilement des programmes concis, sans bogues et parallélisables.

10
sepp2k

Je pense que l'exemple le plus pratique de la nécessité d'une programmation fonctionnelle est la concurrence - les programmes fonctionnels sont naturellement sûrs pour les threads et étant donné l'essor du matériel multicœur, cela est de la plus haute importance.

La programmation fonctionnelle augmente également la modularité - vous pouvez souvent voir des méthodes/fonctions impérativement beaucoup trop longues - vous ne verrez presque jamais une fonction de plus de quelques lignes. Et comme tout est découplé - la réutilisation est bien meilleure et les tests unitaires sont très très faciles.

5
Bozhidar Batsov

Il n'est pas nécessaire que ce soit l'un ou l'autre: utiliser un langage comme C # 3.0 vous permet de mélanger les meilleurs éléments de chacun. OO peut être utilisé pour la structure à grande échelle au niveau de la classe et au-dessus, Style fonctionnel pour la structure à petite échelle au niveau de la méthode.

L'utilisation du style fonctionnel permet d'écrire du code qui déclare clairement son intention, sans être mélangé avec des instructions de flux de contrôle, etc. En raison de principes comme la programmation sans effets secondaires, il est beaucoup plus facile de raisonner sur le code et de vérifier son exactitude .

5
Samuel Jack

Une fois le programme développé, le nombre de commandes dans notre vocabulaire devient trop élevé, ce qui le rend très difficile à utiliser. C'est là que la programmation orientée objet nous facilite la vie, car elle nous permet de mieux organiser nos commandes. Nous pouvons associer toutes les commandes impliquant le client à une entité client (une classe), ce qui rend la description beaucoup plus claire. Cependant, le programme est toujours une séquence de commandes spécifiant comment il doit procéder.

La programmation fonctionnelle offre une manière complètement différente d'étendre le vocabulaire. Non limité à l'ajout de nouvelles commandes primitives; nous pouvons également ajouter de nouvelles structures de contrôle – primitives qui spécifient comment nous pouvons assembler des commandes pour créer un programme. Dans les langages impératifs, nous avons pu composer des commandes dans une séquence ou en utilisant un nombre limité de constructions intégrées telles que des boucles, mais si vous regardez des programmes typiques, vous verrez toujours de nombreuses structures récurrentes; façons courantes de combiner des commandes

3
Soner Gönül

Ne pensez pas à la programmation fonctionnelle en termes de "besoin". Au lieu de cela, pensez-y comme une autre technique de programmation qui vous ouvrira l'esprit tout comme la POO, les modèles, le langage d'assemblage, etc. peuvent avoir complètement changé votre façon de penser lorsque (si) vous les avez appris. En fin de compte, l'apprentissage de la programmation fonctionnelle fera de vous un meilleur programmeur.

1
Justin Ethier

Si vous ne connaissez pas déjà la programmation fonctionnelle, son apprentissage vous donne plus de moyens de résoudre les problèmes.

FP est une généralisation simple qui promeut les fonctions en valeurs de première classe alors que OOP est pour la structuration à grande échelle du code. Il y a cependant un certain chevauchement où OOP les modèles de conception peuvent être représentés directement et beaucoup plus succinctement en utilisant des fonctions de première classe.

De nombreux langages fournissent à la fois FP et OOP, y compris OCaml, C # 3.0 et F #.

Santé, Jon Harrop.

0
Jon Harrop