Question

Cela peut être un oxymore, mais comment mettre à jour une entité de données dans le style de programmation fonctionnel? D'après tout ce que j'ai lu, la programmation de style fonctionnel utilise des transformations pour renvoyer une sortie sur des entités immuables. La seule chose à laquelle je peux penser serait de remplacer complètement l'entité d'origine, mais cela semble presque identique à une approche de mise à jour classique.

Était-ce utile?

La solution

Parlez-vous des entités de base de données sur disque ou des structures de données en mémoire.

Pour ces derniers, les langages fonctionnels utilisent des structures de données persistantes, qui sont implémentées de sorte que la nouvelle version et l'ancienne version soient toutes deux disponibles après la mise à jour, tout en partageant des parties communes (pour une efficacité optimale). Il semble donc que vous retourniez une structure de données totalement nouvelle, mais en réalité, elle partage l'essentiel de son implémentation avec celle qu'elle modifiait.

Il existe de très bonnes implémentations à regarder dans la source clojure (écrite en Java) - j'en ai séparé deux sur mon blog

http: //www.loufranco .com / blog / files / 20-Days-of-Clojure-Day-7.html

http: //www.loufranco .com / blog / files / 20-Days-of-Clojure-Day-8.html

Autres conseils

Lou Franco l'a. Les structures de données dans les langages fonctionnels sont implémentées de telle sorte que, pour les modifier, vous "remplaciez complètement". l'entité d'origine. Dans les coulisses, ils utilisent toujours la plupart de l'ancien: ils ne font que remplacer les bits modifiés. L’ancienne version existe toujours aussi, mais le ramasse-miettes la détruira éventuellement tant que personne ne la mentionnera.

La réponse courte est que dans le style fonctionnel, chaque entité de données serait immuable, donc une mise à jour est en réalité une nouvelle entité de données avec la valeur mise à jour, un peu comme le fonctionnement des chaînes dans .NET.

Les véritables défis étant liés aux E / S, il devient difficile de modéliser les E / S de manière purement fonctionnelle, ce qui conduit à des solutions de contournement telles que Monads .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top