Vorrei iniziare a trafficare con ClojureScript, ma sono perplesso su alcuni punti. Il mio problema è quello che è un buon modo per gestire i cambiamenti di stato derivanti dall'interazione dell'utente, quando si cerca di lavorare in modo funzionale.
Lasciatemi fare un paio di esempi. Ho in mente le applicazioni che funzionano nel browser, ma penso che il problema sia più generale. Certamente qualcosa cambierà - il DOM almeno. Ma mi piacerebbe scoprire come organizzare il resto del codice per lavorare con strutture dati immutabili.
1) Dire che voglio associare alcuni eventi a qualche oggetto DOM. Questo non è difficile da fare in un modo per lo più funzionale: quando si crea il nodo, si allega una mappa di hash con i vari gestori di eventi. Ma considera il caso in cui stai utilizzando la delega degli eventi. Quindi, quando si crea un nuovo nodo, è possibile associare un gestore di eventi a un nodo padre che probabilmente esiste già. Quindi dovresti modificare l'hash associato al nodo già esistente.
2) Dire che sto progettando un modulo di completamento automatico per un campo di input. Ogni volta che l'utente preme un tasto, posso effettuare una chiamata a un server per ottenere i suggerimenti. Questo è facile. Ma ora supponiamo che voglio ottimizzarlo un po '. Se conosco tutti i risultati che corrispondono a foo
, non c'è motivo di chiedere nuovamente tutti i risultati che corrispondono a foobar
; Posso solo filtrare il primo. Quindi ho bisogno di costruire una sorta di cache. Questa cache verrà aggiornata ogni volta che l'utente inserisce una nuova parola che non è un superset delle parole precedentemente inserite. Ancora: come modellare la cache? Il modo più ragionevole sembra essere una hash mappatura delle parole ai risultati, ma dovrebbe essere mutabile.
Puoi suggerire alcuni schemi che renderebbero più semplice incorporare le modifiche dovute all'interazione dell'utente in un progetto funzionale?