Issu d'un background OOP (Java), j'apprends Scala par moi-même. Bien que je puisse facilement voir les avantages d'utiliser des objets immuables individuellement, j'ai du mal à voir comment on peut concevoir une application entière comme ça. Je vais donner un exemple:
Disons que j'ai des objets qui représentent des "matériaux" et leurs propriétés (je conçois un jeu, donc j'ai vraiment ce problème), comme l'eau et la glace. J'aurais un "gestionnaire" qui possède toutes ces instances de matériaux. Une propriété serait le point de congélation et de fusion, et ce à quoi le matériau gèle ou fond.
[EDIT] Toutes les instances matérielles sont "singleton", un peu comme une énumération Java.
Je veux que "l'eau" dise qu'elle gèle en "glace" à 0 ° C, et "glace" pour dire qu'elle fond en "eau" à 1 ° C. Mais si l'eau et la glace sont immuables, elles ne peuvent pas obtenir une référence l'une à l'autre en tant que paramètres de constructeur, car l'un d'entre eux doit être créé en premier, et que l'on ne peut pas obtenir de référence à l'autre en tant que paramètre de constructeur qui n'existe pas encore. Je pourrais résoudre ce problème en leur donnant à la fois une référence au gestionnaire afin qu'ils puissent l'interroger pour trouver l'autre instance de matériau dont ils ont besoin à chaque fois qu'on leur demande leurs propriétés de congélation / fusion, mais je reçois le même problème entre le gestionnaire et les matériaux, qu'ils ont besoin d'une référence les uns aux autres, mais il ne peut être fourni dans le constructeur que pour l'un d'eux, de sorte que le gestionnaire ou le matériel ne peut pas être immuable.
Est-ce qu'ils n'ont aucun moyen de contourner ce problème, ou dois-je utiliser des techniques de programmation "fonctionnelles", ou un autre modèle pour le résoudre?
h2o
matériel