afin que vous puissiez rendre votre programme facilement possible dans le futur.Que faites-vous pour rendre votre code fonctionnel?
Répondre
Je me concentre sur la fabrication des articles immuables. Les objets immuables vous permettent de raisonner sur le code multi-thread beaucoup plus facilement que les objets "thread-safe". L'objet a un état visible qui peut être transmis entre les threads sans aucune synchronisation. Il prend la pensée de la programmation multi-thread.
Si cela vous intéresse, j'ai publié beaucoup de mon travail avec des objets immuables, en particulier des collections immuables sur la galerie de code. Le nom du projet est RantPack. Dans la zone de collecte Je
- ImmutableCollection <T>
- ImmutableMap < TKey, TValue >
- ImmutableAvlTree <T>
- ImmutableLinkedList <T>
- ImmutableArray <T>
- ImmutableStack <T>
- ImmutableQueue <T>
Il y a une couche de cale supplémentaire (CollectionUtility) qui produit des objets enveloppe qui mettent en oeuvre des interfaces BCL tels que IList <T> et ICollection <T>. Ils ne peuvent pas implémenter complètement les interfaces puisqu'elles sont immuables mais toutes les méthodes possibles sont implémentées.
Le code source (C#) incluant les tests unitaires est également disponible sur le site.
N'utilisez pas de variables membres ou de variables globales. Utilisez la pile locale de fonctions/méthodes. Lorsqu'une méthode utilise uniquement des variables à portée interne et des paramètres d'appel et renvoie toutes les informations à l'aide des paramètres out/inout/reference ou des valeurs de retour, elle est fonctionnelle.
Je programme principalement en Java. J'attends patiemment le jour où les fermetures seront ajoutées à la langue. Mais comme je suis toujours coincé sur Java 1.4.2, même s'ils sont ajoutés, ça ne va pas durer longtemps! Cela dit, ma principale méthode de programmation "fonctionnelle" consiste à utiliser beaucoup le mot-clé "final". J'essaie d'avoir autant de classes que possible totalement immuables, et pour le reste d'avoir une distinction claire entre ce qui est transitoire et ce qui est immuable.
+1 pour le "final" - l'immutabilité est votre ami. vous n'avez pas non plus besoin d'attendre les fermetures si vous utilisez l'un des langages JVM fonctionnels (par exemple Clojure ou Scala) :-) – mikera
Rend tout asynchrone. Utiliser des objets, des messages, etc. immuables Communiquer via des files d'attente.
Je peux voir comment MQ aide la concurrence, mais est-ce vraiment fonctionnel? – Guillaume
Vous avez raison, ce n'est pas fonctionnel, mais ça aide la simultanéité qui est ce que je comprends est le but principal ici. Peut-être que je me trompe et ce n'est pas le cas. –
Voici une discussion sur rubyconf 2008 à propos du sujet, elle est principalement centrée sur le rubis, mais plusieurs concepts restent valables.
http://rubyconf2008.confreaks.com/better-ruby-through-functional-programming-2.html
Vous ne couvre pas tout: [...] ne pas utiliser les fonctions d'E/S ou des fonctions qui renvoie une valeur aléatoire, etc. En gros, ne pas utiliser les fonctions avec des effets secondaires. – Claymore