为什么日常应用开发难以做到纯函数
小白角度谈为什么日常应用开发中难以做到纯函数
什么是纯函数
给相同的输入,每次输出都相同。
纯函数的好处
- 便于测试
- 可以缓存加速计算
日常开发中「不纯」的地方
- 网络请求
- 随机函数
网络请求为什么不纯
对于每次请求,尽管参数相同,返回结果可能不同。例如搜索商品,由于商家对商品的上架下架,就会导致每次使用相同的关键词搜索出的商品结果不同。
说到底,对数据库的写入行为就是一次赋值行为,就是一种「不纯」的行为。
随机函数为什么不纯
每次对随机函数的调用的返回值都可能不同
如何「纯化」
将不纯的地方提到函数层面。
例如对于赋值行为,赋值的最终目的是使用这个值,只是在使用这个值之前需要对值做一些运算,使用变量来存储这个值使得代码更便于理解而已。理论上来说我们可以不需要任何的赋值,而只是对一个字面量数值做一系列运算。也就是说,使用函数来代替赋值。
例如对于一个简单的计数器,正常可能这么写代码:
let count = 0; |
add 函数每次调用的返回结果都不一致,这不是一个纯函数。
我们可以「纯化」它:
function add(isFinish) { |