函数式编程-纯函数

131 阅读2分钟

函数为什么非纯不可以 我就不纯了,能发生什么事情呢 咱们一起来看看

纯函数”本质上是一套规则,是一种约束。

这层约束存在的背景,就是为了让 JS 函数和数学函数的行为对齐。

纯函数,高度确定的函数

那为什么就非得确定呢, 不纯的函数(Impure function)最直接的问题,就是不确定性—,确定的输入导致了不确定的输出 对于一个软件项目来讲,不确定性越大,导致测试难道也在加大

这个也联系设计模式里面 的单一职责,,所谓的单一职责,在我理解就是分离变与不变 这一点其实和数学中的函数高度一致 确定的输入,只对应唯一的输出

数学化的 JS 函数 === 纯函数

js函数由于太过灵活,可能引入全局变量,或者参数影响,导致每次调用返回都不一致 那为了靠拢这个数学,那就就按照数学原则去编程

为什么一定要去强调数据不可变.

  1. js中真正不可变数据里面包含了 基础数据类型
  2. 但对引用类型数据,其实不对,最多只能保证引用地址不变,值还是有可能变化
  3. 在函数式编程这种范式下,我们校验一个函数有效性的关键依据,永远是“针对已知的输入,能否给出符合预期的输出”,这样的校验非常清晰、且容易实现。
  4. 所以如果每次使用和测试函数确定的输入没有办法给确定的输出这个函数就是完全不可预测的