我对一些高级函数式编程思想很陌生,特别是:如何使用不可变数据。数据结构通常是复合的,由较小的数据结构组成。例如,如果我们有一个家庭集合,它由一个家庭的所有成员组成。我们可以构建家庭:
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
但出于什么目的?由于所有对象都只是快照,我看不到保留引用的意义。状态变化已经被抽象掉了,所以我们不打算使用观察者模式。因此,像 GUI 这样关心状态变化的依赖事物是如何处理的?为了使事物保持同步,观察的功能替代方法是什么?我不认为对象本身在渲染自己方面有任何业务。功能程序如何处理保持单页 webapp GUI 的状态同步?
物有所值Rich Hickey 的演讲启发了我探索函数式编程。我得到了他的概念,但我很难跳到一个实际的实现(在 JavaScript 中)。