函数式编程

356 阅读1分钟

函数式编程

函数式编程是一种编程范式,也就是如何编写程序的方法论

  • 主要思想:把计算过程尽量分解成一系列可复用函数的调用
  • 主要特征:函数是“第一等公民”
  • 函数与其他数据类型一样的地位,可以赋值给其他变量,也可以作为函数参数、函数返回值

函数式编程最早出现在LISP语言,绝大部分的现代编程语言也对函数式编程做了不同程度的支持

函数式编程中几个常用的概念

  • Higher-Order Function、Function Currying
  • Functor、Applicative Functor、Monad

高阶函数

  • 高阶函数是至少满足下列一个条件的函数
    • 接受一个或者多个函数作为输入(map、filter、reduce)
    • 返回一个函数
  • FP 中到处都是高阶函数

柯里化

  • 什么是柯里化?
    • 将一个接受多参数的函数变换为一系列只接受单个参数的函数
    • Array、Optional 的 map 方法接收的参数就是一个柯里化函数

Functor

什么样的 Type 才能称之为是函子(Functor)

func map<T>(_ fn: (Inner) -> T) -> Type<T>

所以说 Swift 中 Array 的 map 函数就是一个函子

func map<T>(_ fn: (Element) -> T) -> Array<T>
func map<T>(_ fn: (Wrapped) -> T) -> Optional<T>

Applicative Functor

  • 对任意一个函子 F,如果能支持以下运算,该函子就是一个适用函子
func pure<A>(_ value: A) -> [A] { [value] }
func <*><A, B>(fn: [(A) -> B], value: [A]) -> [B] {
    
}
  • Optional 可以成为适用函子
  • Array 可以成为适用函子