Vorrei iniziare a giocherellare 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 cerchi di lavorare funzionalmente.
Vorrei fare un paio di esempi. Ho in mente applicazioni che girano nel browser, ma penso che il problema sia più generale. Naturalmente qualcosa cambierà, almeno il DOM. Ma vorrei scoprire come organizzare il resto del codice per lavorare con strutture di dati immutabili.
1) Dire che voglio associare alcuni eventi a qualche oggetto DOM. Questo non è difficile da fare in un modo principalmente funzionale: quando si crea il nodo, si allega una mappa 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 collegare un gestore eventi a un nodo padre che probabilmente esiste già. Quindi dovresti cambiare 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 io voglia ottimizzarlo un po '. Se conosco tutti i risultati corrispondenti foo
non ha senso chiedere di nuovo tutti i risultati corrispondenti foobar
; Posso solo filtrare il primo. Quindi ho bisogno di creare un qualche tipo di cache. Questa cache verrà aggiornata ogni volta che l'utente inserisce una nuova parola che non è un superset delle parole precedentemente immesse. Ancora: come modellare la cache? Il modo più ragionevole sembra essere una mappa hash che associa le parole ai risultati, ma dovrebbe essere mutabile.
Puoi suggerire alcuni schemi che faciliterebbero l'incorporazione delle modifiche dovute all'interazione dell'utente in un design funzionale?