函数式编程 vs 面向对象编程
个人体验:我组织代码喜欢用类,但对于某些逻辑比如说数据加工,更喜欢使用纯函数去做,因其安全无副作用。
概念比对
面向对象把所有操作和数据都封装在对象内,通过接受消息做相应的操作。比如,对象 Kitty,它们可以接受“打招呼”的消息,然后做相应的动作。
而函数式的抽象方式刚好相反,是把动作抽象出来,比如“打招呼”就是一个函数,而函数参数就是作为数据传入的 Kitty(即 Kitty 进入函数“打招呼”,出来的应该是 Hello Kitty)。
面向对象可以通过继承和组合在对象之间分享一些行为或者说属性,函数式的思路就是通过组合已有的函数形成一个新的函数。
什么是纯函数
纯函数是这样一种函数,对于相同的输入,永远会得到相同的输出,而且没有任何可观察的副作用。
面向对象语言的问题是,它们永远都要随身携带那些隐式的环境。你只需要一个香蕉,但却得到一个拿着香蕉的大猩猩...以及整个丛林。by Erlang 作者:Joe Armstrong
纯函数不会干扰外部的变量,而使用类,其方法属性永远自带隐式能影响全局的可能,
共享可变状态是万恶之源
使用纯函数使代码更有可移植性和测试性。