我是一些高级函数式编程思想的新手,特别是:如何使用不可变数据。数据结构通常是由较小的数据结构组成的组合。例如,如果我们有一个由家庭所有成员组成的家庭收藏。我们可以构建家庭: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