函数式编程(一)

函数式编程是一种编程范式, 与之相对应的是面向对象编程和指令式编程等。函数式编程(FP)要更加偏向于声明式而不是命令式;
声明式关注于程序做什么, 命令式关注于程序怎样做
在FP 中, 有下面几个关键词:
  • 纯函数
  • 函数组合
  • 避免状态共享
  • 避免状态的变化
  • 避免副作用
  1. 纯函数纯函数给定特定的输入值,将总会返回同样的输出值,且没有副作用, 纯函数具有引用透明性的特点,这使得我们更易追踪数据的变化, 减少问题的发生
  2. 函数组合函数组合可以根据我们传入的多个函数返回多个函数组合的新函数,或者根据传入的多个函数进行计算
  3. 避免状态共享状态共享的问题在于你需要了解某一个函数的功能时, 你需要知道函数中使用到的共享变量的调用历史记录, 另外, 使用共享的状态时, 调用函数的顺序不同会导致最终共享状态数据的不同
  4. 状态不变性当函数中的数据被创建之后将不会被更改,如果创建的数据在被创建之后可以被调用的函数更改,那么将会导致程序中的数据流混乱
  5. 避免副作用副作用指的是调用函数之后, 改变了函数之外的状态, 或者导致其他的可以被观测到的行为比如以下副作用:
    • 改变外部对象或者变量属性
    • 写文件
    • 错发任何外部的程序
    • 调用其他含有副作用的函数
    避免上面的副作用可以使得我们易于扩展, 重构, debug 代码
函数式编程中的一些其他应用:

高阶函数

高阶函数可以接受函数作为参数, 返回一种新的函数,高阶函数经常被用作:
  • 抽象或者隔离动作, 行为, 例如回调函数或者 promises
  • 创造作用于范围广范的数据类型的工具方法
  • 实现函数组合或者函数重用,通过将函数作为参数传递或者创建柯里化的函数
  • 接口函数列表, 返回这些输入方法的组合