La programmation fonctionnelle est une bête étrange pour moi. J'ai appris F # et Haskell, écrit quelques programmes simples et j'adore les utiliser, mais je n'ai jamais eu le "flash de révélation" dont certains parlent. Mais lentement, j'ai remarqué que de plus en plus j'écrivais du code qui devait être immuable, divisant les tâches en fonctions plus petites et essayant d'utiliser beaucoup plus les délégués. C'est une chose qui, si vous l'aimez, se glisse dans votre travail parce que la valeur de ces techniques va de soi.
Maintenant, plus concrètement pour la formation: je trouve que deux concepts cliquent vraiment sur la programmation fonctionnelle comme style pour moi.
Premièrement, le style FP est basé sur la structure des données, pas sur la composition comme dans la POO. J'ai regardé quelque chose comme List en C # comme une astuce pour générer des listes de type sécurisé, quelque chose qui a composé le type (chaîne) dans l'autre type (liste). Après avoir appris la PF, je regarde les génériques plus comme des monades maintenant. La liste est une forme structurée que le code peut prendre et elle décore les chaînes.
Deuxièmement, et peut-être plus utile aux programmeurs C # / ASP, l'idée que FP fonctionne sur la récursivité et la répétition, tandis que la POO travaille sur la mutabilité et la boucle. J'ai tendance à considérer le cycle de vie de la page ASP comme une sorte de FP maintenant: chaque demande est traitée à partir de zéro tout au long du cycle de vie, de sorte que la page entière est, en fait, un grand programme à récurrence lente. Si vous pouvez affiner cette notion, vous aurez une meilleure idée de la façon dont un programme impératif peut être structuré autour de boucles de fonctions qui prennent des données, fonctionnent dessus et retournent de nouvelles données au lieu de modifier les anciennes.
L'obstacle le plus délicat, du moins pour moi, à surmonter avec cette approche est que le sentiment de naufrage que vous gaspillez des tonnes de ressources lorsque vous utilisez des objets mutables économiserait une tonne de mémoire. Dans GC, nous avons confiance, et j'ai juste dû apprendre à laisser tomber les problèmes de performances jusqu'à ce que j'aie vu le programme s'exécuter et vérifié s'il y en avait, et si oui, utiliser un profileur pour voir exactement où étaient les problèmes.