Modelli dell'interfaccia utente in lingue funzionali

11

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?

    
posta Andrea 22.03.2012 - 18:45
fonte

1 risposta

3

Come menzionato nei commenti dovresti cercare "Functional Reactive Programming" e dovresti anche leggere alcuni dei post al link . Più in particolare dovresti probabilmente leggere " Non innamorarti della tua tecnologia ", " Codice di scrittura come hai appena imparato come programmare "," Funzionale La programmazione non funziona (e cosa fare al riguardo) ", e forse alcuni altri.

Evitare completamente la mutabilità e gli effetti collaterali è praticamente impossibile. Persino i programmatori di Haskell ogni tanto fanno uso di unsafePerformIO per uscire dal paradigma puramente funzionale, privo di effetti collaterali, tipizzato staticamente, per fare certe cose. Se ti stai imbarcando in questo progetto come un esercizio puramente accademico, vai avanti ed evita la mutabilità e gli effetti collaterali il più possibile, ma se stai cercando di costruire un prodotto utilizzabile a una scadenza, nessun modello ti salverà.

    
risposta data 13.05.2012 - 21:29
fonte

Leggi altre domande sui tag