1. referential transparency: 相同参数,每次调用,返回的结果都是一样的。
2. lack-of-side-effects:无side effects,也就是不会改变“外面的世界”(通常是改变全局变量,或者output io)
为什么这两个特性这么好呢?因为把每个function都独立起来了。(从代码级别的隔离,卧槽)。
面向对象中的class提供的一个主要功能就是屏蔽内部的数据,而函数编程这方面更好。
面向对象编程,产生的一个问题是,会把一些函数和class绑定起来,减少了可重复利用性。
而函数编程,则把数据结构和函数解耦。
a) decoupling functions and data and
b) programming to a small set of abstractions, you end up with more reusable, composable code.
还有一点还是没想清楚:函数编程,多线程是怎么搞的,imutable data structure是怎么帮助多线程编程的。