J'ai récemment appris F # pour le plaisir (je suis un développeur VB.NET/C#), et j'aime vraiment certains de ses avantages. Théoriquement, c'est. Mais j'ai du mal à imaginer des scénarios où je choisirais de coder en F # plutôt qu'en C #. Des idées?
J'ai récemment appris F # pour le plaisir (je suis un développeur VB.NET/C#), et j'aime vraiment certains de ses avantages. Théoriquement, c'est. Mais j'ai du mal à imaginer des scénarios où je choisirais de coder en F # plutôt qu'en C #. Des idées?
Réponses:
Quelques arguments pour une programmation fonctionnelle pure:
Pour un traitement complet, voir Pourquoi la programmation fonctionnelle est importante et Pourquoi la programmation fonctionnelle est importante .
J'ai du mal à imaginer des scénarios où je choisirais de coder en F # plutôt qu'en C #. Des idées?
D' ici :
Serveurs asynchrones
Métaprogrammation (par exemple analyse)
Informatique technique
Applications GUI
Programmation logique
Essai
Performance
inline
pour une abstraction d'ordre supérieur gratuite.Voici à quoi sert la programmation de style fonctionnel - sur une base plus ou moins quotidienne.
Nous faisons beaucoup de choses statistiques et actuarielles avec des ensembles de données assez volumineux. Les données extraites de la base de données sont - essentiellement des objets statiques et immuables. Aucune raison de créer une classe avec des méthodes.
Chaque étape du calcul ajoute quelques détails supplémentaires, mais ne mute pas essentiellement l'objet. À la «fin» du pipeline, nous faisons vraiment une réduction de fantaisie pour calculer les sommes et les comptes et d'autres choses.
Imagine ça.
for data in summarize( enrich( calculate( some_query( criteria() ) ) ) ):
print data
Chaque "phase" du calcul est une boucle de programmation fonctionnelle qui fait un simple lecture-calcul-rendement et crée un objet composite d'autres choses ainsi que des résultats.
(Nous utilisons Python, d'où la programmation fonctionnelle utilisant des fonctions de générateur.)
Il est plus facile d'utiliser des objets sans état et immuables.
criteria() |> some_query |> calculate |> enrich |> summarize
Je trouve que l'opérateur du tuyau avant peut conduire à un code plus clair, mais je m'éloigne du sujet.
map
pour obtenir le même effet.
Techniquement, ce n'est pas une propriété unique d'une programmation fonctionnelle, et F # n'est pas un langage fonctionnel pur. F #, en tant que descendant de ML, fournit une excellente correspondance de motifs et des types de données algébriques. Ainsi, pour toute tâche nécessitant des structures de données complexes, F # est beaucoup plus expressif et facile à utiliser que C #.
Imaginez implémenter un compilateur en C # et F # - représentant un arbre de syntaxe abstraite et les transforme dessus est beaucoup plus simple si votre langage fournit des ADT et une correspondance de modèle.
Si vous voulez essayer Haskell entièrement fonctionnel, Erlang a aussi des trucs très sympas à ce sujet.
Simon Payton-Jones a dit à propos de Haskell, qu'il veut avoir un programme qui n'a évidemment aucun bogue, plutôt que d'avoir aucun bogue évident.
(J'ai probablement obtenu un peu la citation, mais vous avez l'idée)
En contraignant les effets secondaires, il est beaucoup plus facile de prouver que votre code est correct.
Un avantage certain est qu'il est beaucoup plus facile à paralléliser.
F#
n'est pas entièrement représentatif de la programmation fonctionnelle. EssayezClojure
plutôt.