issues
search
lingxiao-Zhu
/
blog
总结积累,读书笔记
3
stars
0
forks
source link
《JavaScript函数式编程指南》
#1
Closed
lingxiao-Zhu
closed
3 years ago
lingxiao-Zhu
commented
3 years ago
函数式编程目标是使用函数来抽象作用在数据之上的控制流与操作。
将函数看作永不会修改数据的闭合功能单一,必然可以减少潜在的bug。
函数式编程是指为创建不可变的程序,通过消除外部可见的副作用,来对纯函数的声明式的求值过程。
当考虑设计应用时,你应该问问自己:
可扩展性:我是否需要不断的重构代码来支持额外的功能?
易模块化:如果我更改了一个文件,另外一个文件会不会收到影响?
可重用性:是否有很多重复的代码?
可测性:给这些函数添加单元测试是否困难?
易推理性:我写的代码是否非结构化严重并难以推理?
在函数式编程中,要做到不可变的思考,就需要将任何对象视为数值,类似于字符串和数字,这样做函数可以把对象传来传去,而不用担心被串改。
函数式的控制流能够在不需要研究任何内部细节的条件下提供该程序意图的清晰结构,这样就能更深刻地了解代码,并获知数据在不同阶段是如何流入和流出的。
面向对象大多是命令式的,因此在很大程度上依赖于使用基于对象的封装来保护其自身和继承的可变状态的完整性,再通过实例方法来暴露或修改这些状态,其结果是,对象的数据与行为以一种内聚的形式紧耦合在一起。而函数式编程中,一切都是不可变,数据和行为是松耦合的。
方法链的缺点是由于方法与所属的对象紧密耦合在一起,也就限制了链中可以使用的方法数量,不能轻松的将不同函数连接在一起。
以point-free的风格编写,并用函数组合子来组织的程序控制流,可解决现实问题。