为什么日常应用开发难以做到纯函数

小白角度谈为什么日常应用开发中难以做到纯函数

什么是纯函数

给相同的输入,每次输出都相同。

纯函数的好处

  1. 便于测试
  2. 可以缓存加速计算

日常开发中「不纯」的地方

  1. 网络请求
  2. 随机函数

网络请求为什么不纯

对于每次请求,尽管参数相同,返回结果可能不同。例如搜索商品,由于商家对商品的上架下架,就会导致每次使用相同的关键词搜索出的商品结果不同。

说到底,对数据库的写入行为就是一次赋值行为,就是一种「不纯」的行为。

随机函数为什么不纯

每次对随机函数的调用的返回值都可能不同

如何「纯化」

将不纯的地方提到函数层面。

例如对于赋值行为,赋值的最终目的是使用这个值,只是在使用这个值之前需要对值做一些运算,使用变量来存储这个值使得代码更便于理解而已。理论上来说我们可以不需要任何的赋值,而只是对一个字面量数值做一系列运算。也就是说,使用函数来代替赋值。

例如对于一个简单的计数器,正常可能这么写代码:

let count = 0;

function add() {
count = count + 1;
return count;
}

console.log(add());
console.log(add());

add 函数每次调用的返回结果都不一致,这不是一个纯函数。

我们可以「纯化」它:

function add(isFinish) {
if (isFinish) {
return 0;
}

return function(isFinish) {
return add(isFinish) + 1;
};
}

console.log(add(true));
console.log(add()(true));
Author: LeoB_O
Link: https://leob-o.github.io/2020/03/24/为什么日常应用开发难以做到纯函数/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.