Provenendo da un background OOP (Java), sto imparando Scala da solo. Mentre posso facilmente vedere i vantaggi dell'utilizzo di oggetti immutabili singolarmente, sto facendo fatica a vedere come si può progettare un'intera applicazione del genere. Faccio un esempio:
Supponiamo di avere oggetti che rappresentano i "materiali" e le loro proprietà (sto progettando un gioco, quindi ho davvero quel problema), come l'acqua e il ghiaccio. Avrei un "manager" che possiede tutte queste istanze di materiali. Una proprietà sarebbe il punto di congelamento e fusione e ciò a cui il materiale si congela o si scioglie.
[EDIT] Tutte le istanze materiali sono "singleton", un po 'come un Enum Java.
Voglio "acqua" per dire che si congela a "ghiaccio" a 0 ° C, e "ghiaccio" per dire che si scioglie in "acqua" a 1 ° C. Ma se l'acqua e il ghiaccio sono immutabili, non possono ottenere un riferimento reciproco come parametri del costruttore, perché uno di essi deve essere creato per primo e che non si può ottenere un riferimento all'altro non ancora esistente come parametro del costruttore. Potrei risolvere questo dando a entrambi un riferimento al gestore in modo che possano interrogarlo per trovare l'altra istanza materiale di cui hanno bisogno ogni volta che viene chiesto loro le proprietà di congelamento / fusione, ma poi ottengo lo stesso problema tra il gestore e i materiali, di cui hanno bisogno di un riferimento reciproco, ma possono essere forniti nel costruttore solo per uno di essi, quindi il manager o il materiale non possono essere immutabili.
Non è proprio il modo per aggirare questo problema o devo usare tecniche di programmazione "funzionali" o qualche altro modello per risolverlo?
h2o
materiale