面向对象 vs. 函数式编程
Object oriented vs. functional programming — The Endeavour
OO makes code understandable by encapsulating moving parts.
OO通过切分封装能够更加易懂
FP makes code understandable by minimizing moving parts.
而FP通过最小化切分使得代码更加易懂。
前者试图将状态隐藏于对象接口之后,而后者试图通过尽可能的纯函数功能将状态切分再细直至最小化。(banq:两者侧重点还是不太一样)
大多数习惯于面向对象程序员喜欢将在OO基础上引入FP,但是作者认为:可能丧失一些纯函数式语言的独特特点,纯函数式语言更加易于调试,能够并行执行,这取决于他们没有副作用(side effects)
以下是我理解:因为将行为封装在对象中的方式带来最大问题就是行为功能的副作用,也就是某个对象的方法执行其主要功能作用外,必然带来其副作用,需要程序员非常小心应付,经常不经意就带来副作用,这样编程就很累,相反,如果我们直接从方法功能入手,就自然避免副作用,打个比喻:某个老板A手下有一个人才B很能干,可以独当一面,如果B一直位于A封装边界内,A可能让其偶尔做一些其不擅长的时间,这就是B的副作用;而如果让B独立新公司,完全放手,则对其没有牵制,也就没有副作用。
该文提出:100%纯函数式是否需要?James Hague认为不需要,只要85%就可以,权衡利弊,左右取之于中,提出functional in the small and OO in the large观点,我个人理解就是:在宏观战略Large方面使用面向对象;而在战术small方面使用函数式编程。
由于函数式编程在外观上类似以前面向过程编程中函数,所以,这个帖子也可以看成面向对象和面向过程分裂之后的再次组合的一个方式。