这是我参与8月更文挑战的第7天,活动详情查看:8月更文挑战
就像黑子的篮球中,各个球员渴望今进入zone那样,笔者也希望能够通过对函数式编程的学习完成自己的进化吧,此篇纯为读书笔记,不喜勿喷哈。
1.基本概念:
1.声明式编程:函数式编程属于声明式编程范式。
- 声明式编程范式:会描述一系列操作,但是
不会暴露他们是如何实现或者数据流是如何穿过它们的。它关注于如何用各种表达式来描述程序逻辑,而不一定指明控制流活状态的变化。 - 命令式(过程式)编程范式:命令式编程将计算机程序视为一系列
自上而下的断言,通过修改系统各个状态来计算最终的结果。
2.纯函数
函数式编程的一个前提就是---使用纯函数构建具有不不变性的程序。
2.1 纯函数特点:
- 仅取决于输入
- 不会造成超出其作用域的变化
2.2 不纯函数例子:
var count = 0;
function add(){
return ++count;
}
函数add是不纯的,因为他读取并修改了一个外部变量产生了副作用。其结果是不可预见的,因为count可以在调用间隔的任何时间发生改变。
2.3 程序中的副作用:
程序的副作用是什么?
下面的链接地址是笔者搜索到对于副作用,比较有趣且容易理解的解释blog👇
baijiahao.baidu.com/s?id=168675…
2.4 函数式编程小技巧:
- 将长函数拆解成多个具有
单一职责的短函数 - 通过显式地将
完成功能所需的依赖都定义为函数参数,减少副作用的数量
3.引用透明:
引用透明是定义一个纯函数较为正确的方式。纯度在这个意义上表明一个函数的参数和返回值之间的映射关系。
如果一个函数对于相同的输入始终产生相同的结果,那么就称之为引用透明
4.存储不可变数据:
不可变数据是指那些被创建后不能更改的数据。
2.函数式编程的优点:
函数式编程实际上是分解(将程序拆分成小片)和组合(将小片段链接到一起)之间的相互作用。
小结:
- 使用纯函数的代码剧不会更改活破坏全局状态,有助于提高代码的
测试性和可维护性。 - 函数式编程才用
声明式的风格,易于推理,这提高了应用程序的整体可读性,通过使用组合和lambda表达式使代码跟家精简。 - 集合中的数据元素处理可以通过链接如
map和reduce这样的函数来实现。 - 函数式编程将函数视为积木,通过一等高阶函数来提高代码的
模块化和可重用性。 - 可以利用响应式编程组合人各个函数来降低事件驱动程序的复杂性。