Lors de mes recherches sur la programmation fonctionnelle, j'ai remarqué qu'il y a des cas où les listes de paramètres commencent à devenir excessives lors de l'utilisation de structures de données immuables imbriquées. Cela est dû au fait que lors de la mise à jour d'un état d'objet, vous devez également mettre à jour tous les nœuds parents dans la structure de données. Notez que je prends ici "mise à jour" pour signifier "retourner un nouvel objet immuable avec le changement approprié".Gestion des mises à jour des structures de données immuables imbriquées dans les langages fonctionnels
par exemple. le genre de fonction que j'ai trouvé écrit moi-même (par exemple Clojure) est:
(defn update-object-in-world [world country city building object property value]
(update-country-in-world world
(update-city-in-country country
(update-building-in-city building
(update-object-in-building object property value)))))
Tout cela pour mettre à jour une propriété simple est assez laid, mais en plus l'appelant doit rassembler tous les paramètres!
Cela doit être une exigence assez courante lorsque vous traitez des structures de données immuables dans les langages fonctionnels en général, alors y a-t-il un bon schéma ou une astuce pour éviter cela que je devrais utiliser à la place?
Vous pourriez aplatir vos données: stocker les mondes, pays, villes, etc. séparément. Ensuite, si vous devez en mettre un à jour, mettez-le à jour dans la structure plate. Reliez les données ensemble par l'intermédiaire de clés afin de pouvoir les assembler plus tard lorsque vous en aurez besoin. Nous sommes en quelque sorte en train de réinventer des bases de données relationnelles à ce stade. –