type
status
date
slug
summary
tags
category
icon
password

函数式编程(对运算过程进行抽象)

函数式编程(FP)是编程范式之一。编程范式还有面向过程编程、面向对象编程
函数式编程用来描述数据(函数)之间的映射

函数是一等公民

  • 函数可以存储在变量中
  • 函数作为参数
  • 函数作为返回值

高阶函数

  • 可以把函数作为参数传递给另一个函数
  • 可以把函数作为另一个函数的返回结果

闭包(closure)

可以在另一个作用域中调用一个函数的内部函数并访问到该函数的作用域中的成员
通过浏览器调试(sources),打上断点并且观察stack和scope的变化

纯函数(pure-function)

相同的输入始终会得到相同的输出,而且没有任何可观察的副作用
纯函数的好处
  • 可缓存
  • 可测试
  • 并行处理

Lodash库

副作用

让一个函数变的不纯,降低代码的通用性和复用性

柯里化(curry)

当一个函数有多个参数的时候先传递一部分参数调用它(这部分参数以后永远不变)
然后返回一个新的函数接收剩余的参数,并返回结果

函数组合(compose)

纯函数和柯里化很容易写出洋葱代码 h(g(f(x)))
函数组合默认是从右到左执行;组合函数满足结合律

Point Free

  • 不需要指明处理的数据
  • 只需要合成运算过程
  • 需要定义一些辅助的基本运算函数

函子(Functor) —— 暂时不用深入学习,了解即可

  • 函数式编程的运算不直接操作值,而是由函子完成
  • 函子就是一个实现了map契约的对象
  • 我们可以把函子想像成一个盒子,这个盒子里封装了一个值
  • 想要处理盒子中的值,我们需要给盒子中的map方法传递一个处理值的函数(纯函数),由这个函数对值进行处理
  • 最终盒子的map方法返回一个包含新值的盒子(函子)
MayBe函子、Either函子、IO函子、Pointed函子、Monad函子
folktale库中的task函子可以处理异步任务
 
MidjourneyPromise
Loading...