函数式编程最佳实践🔋

    0

特点

  1. 函数是一等公民,可以被赋值、作为参数传递、作为返回值等等。

函数可以被赋值给一个变量; 函数可以被当作参数传递给其他函数; 函数可以作为另一个函数的返回值

  1. 声明式编程,强调描述要达到的目标,而不是具体实现的步骤。
  2. 惰性执行,只有在需要时才会执行。
  3. 无状态,数据不可变,避免出现意外的副作用。
  4. 纯函数,即相同的输入永远得到相同的输出,没有可观察的副作用。

什么是纯函数

副作用即和函数外部环境发生的交互就是副作用 纯函数是这样一种函数,即相同的输入,永远会得到相同的输出,而且没有任何可观察的副作用。 纯函数也可以理解为数学上的函数

  • 更改文件系统
  • 往数据库插入记录
  • 发送一个 http 请求
  • 可变数据
  • 打印/log
  • 获取用户输入
  • DOM 查询
  • 访问系统状态

优点

  1. 可缓存,避免重复计算相同的结果。
  2. 可移植,可以在不同的平台上使用。
  3. 可测试,因为纯函数可以更容易地进行单元测试。
  4. 函数合成,可以把多个函数组合成一个更大的函数。
  5. 函数柯里化,可以把多个参数的函数转换成接受一个参数的函数,有助于函数复用和组合。

函数合成

js
function compose(...args) { return function (value) { return args.reduceRight((previousValue, currentValue) => { return currentValue(previousValue) },value) } }

函数柯里化

只传递给函数一部分参数来调用它,让它返回一个函数去处理剩下的参数 函数柯里化利用闭包对函数参数进行缓存,可以把函数分为更细粒度

js
const curry = (fn, ...args) => args.length >= fn.length ? fn(...args) : (..._args) => curry(fn, ...args, ..._args);

常用库

  1. ramda 提供了一系列的函数式编程工具函数。
  2. rxjs 提供了响应式编程工具,可以方便地处理异步事件流。
  3. underscorejs 提供了一系列的实用工具函数。
  4. immerjs 可以方便地实现不可变数据。
  5. immutable 提供了一系列的不可变数据结构。
评论区

共有评论 0

暂无评论