53 votes

Comment concevez-vous un programme fonctionnel?

À partir du 1er jour de ma programmation de carrière, j'ai commencé avec la programmation orientée objet. Cependant, je suis intéressé à en apprendre d'autres paradigmes (chose que j'ai dit ici à plusieurs reprises est une bonne chose, mais je n'ai pas eu le temps de le faire). Je pense que je ne suis pas seul prêt, mais le temps, donc je vais commencer la programmation fonctionnelle avec F#.

Cependant, je ne suis pas sûr de la façon de structure beaucoup moins d'applications de conception. Je suis habitué à une classe par fichier et la classe-nom/fonction de verbe d'idées dans la programmation orientée-objet. Comment pensez-vous de la conception et de la structure fonctionnelle des applications?

19voto

Paul Nathan Points 22910

Lisez le SICP .

Une version PDF est également disponible.

13voto

Brian Points 82719

Vous voudrez peut-être consulter un récent billet de blog de la mine: Comment fonctionne la programmation fonctionnelle affecter la structure de votre code?

À un niveau élevé, une méthodologie de conception OO est toujours utile pour la structuration d'une F# programme, mais vous verrez que cette rupture (plus d'exceptions à la règle) que vous obtenez jusqu'aux niveaux inférieurs. Au niveau physique, "une classe par fichier" ne fonctionne pas dans tous les cas, comme mutuellement récursives types doivent être définies dans le même fichier (type Class1 = ... et Class2 = ...), et un peu de votre code peut résider dans le "libre" n'est pas lié à une catégorie particulière (c'est ce que F# "module"; s sont bon pour). Le fichier de commande des contraintes en F# permettra également de vous forcer à réfléchir de manière critique sur les dépendances entre les types dans votre programme; c'est une épée à double tranchant, car il peut prendre plus de travail/pensé pour les démêler de haut niveau des dépendances, mais le rendement des programmes qui sont organisés de manière à toujours les rend accessibles (comme les plus primitifs des entités viennent toujours en premier et vous pouvez toujours lire un programme de "haut en bas" et de nouvelles choses sont introduits un par un, plutôt que de simplement commencer à regarder un répertoire de fichiers de code et sais pas par où commencer').

6voto

Darius Bacon Points 9741

Comment concevoir des programmes est tout à propos de cela (à la longueur fastidieuse, en utilisant Scheme au lieu de F #, mais les principes reportent). En bref, votre code reflète vos types de données; cette idée remonte à l'ancienne "programmation structurée", seule la programmation fonctionnelle est plus explicite à ce sujet, et avec des types de données plus sophistiqués.

5voto

Marcin Points 25366

Étant donné que les langages fonctionnels (c'est à dire pas lisps) par défaut, utilisez de liaison anticipée fonctions polymorphes (efficacement), et que l'orientation de l'objet est juste une façon particulière de s'arranger pour avoir des fonctions polymorphes, ce n'est pas vraiment très différent, si vous savez comment concevoir correctement encapsulé classes.

Lisps utiliser la liaison tardive pour obtenir un effet similaire. Pour être honnête, il n'y a pas beaucoup de différence, sauf que vous n'avez pas explicitement déclarer la structure des types.

Si vous avez programmé largement avec C++ template fonctions, alors vous avez probablement une idée déjà.

Dans tous les cas, la réponse est de petites "classes" et au lieu de modifier l'état interne, vous devez retourner une nouvelle version avec un état différent de l'état.

2voto

Jon Harrop Points 26951

F # fournit les approches OO conventionnelles pour la programmation structurée à grande échelle (par exemple, les interfaces) et ne tente pas de fournir les approches expérimentales utilisées dans des langages tels que OCaml (par exemple, les foncteurs).

Par conséquent, la structuration à grande échelle des programmes F # est essentiellement la même que celle des programmes C #.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X