我是一些高級函數式編程思想的新手,特別是:如何使用不可變數據。數據結構通常是由較小的數據結構組成的組合。例如,如果我們有一個由家庭所有成員組成的家庭收藏。我們可以構建家庭:FP:在沒有實際狀態變化的情況下反映狀態?
var flintstones = new Family().
add(new Member({name: 'Fred'})). //returns new instance of family
add(new Member({name: 'Wilma'}). // "
add(new Member({name: 'Pebbles'})); // "
var fred = flintstones.get({name: 'Fred'}).set({lname: 'Flintstone'});
flintstones = fred.family(); //new instance of family with latest fred.
注意如何改變fred
實際上並沒有改變flintstones
。我可以抓住一個新的參考flintstones
但爲了什麼目的?由於所有對象都僅僅是快照,我無法看到保留引用的重點。狀態變化已被抽象出來,所以我們不會使用Observer模式。因此,如何處理像關心狀態變化的圖形用戶界面這樣的依賴項呢?什麼是觀察的功能選擇,以保持同步?我不認爲這些對象本身就有任何業務呈現自己。功能程序如何處理單頁面web應用程序界面GUI的狀態保持同步?
對於什麼是值得Rich Hickey's talks激勵我去探索函數式編程。我明白了他的觀點,但我正在努力實現一個實際的實現(使用JavaScript)。
不知道我得到了你的問題:這是一個面向對象的方法,而不是一個函數式編程的。你在問如何以更實用的方式轉換它? – ZER0
從我一直在閱讀的內容(尤其是Matthew Strawbridge在他的評論中提供的鏈接),這更多的是關於*反應*而不是*功能*編程。 – bfavaretto
我知道持久數據結構是不可變的。我認爲我並不瞭解的是,國家管理層 - 知道Wilma在與Fred結婚時改變了她的婚前姓名 - 仍然要求程序員管理目前狀態的Wilma的引用(某處)。在某個地方,仍然有一個威爾瑪Slaghoople,但我們目前的參考不再指向它。 – Mario