Sto scrivendo un semplice gioco in Java e voglio imparare Clojure, quindi ho deciso di rifattorizzare il mio attuale codice Java su Clojure. Il problema è che ho codificato così tanto nei linguaggi orientati agli oggetti che non riesco a vedere come farlo dal punto di vista funzionale.
Per essere concreti, ho un Map<String, Country>
all'interno di una classe singleton a cui è possibile accedere da qualsiasi luogo per ottenere un'istanza Paese, aggiornarla e reinserirla nella mappa. L'ho implementato allo stesso modo in Clojure. Ad esempio, per aggiornare un Paese:
(def countries (do-get-countries))
(defn update-country
[country]
(def countries (assoc countries (get country :name) country)))
Inoltre ho creato un defrecord Country
, ma in realtà modifico questi record come
(assoc country :name "New name")
Questi due esempi non sembrano idiomatici secondo me. È questo il modo corretto di farlo in Clojure? Se no, come sarebbe più idiomatico?
Grazie in anticipo!