函数式编程
函数式编程是一种编程范式,也就是如何编写程序的方法论
- 主要思想:把计算过程尽量分解成一系列可复用函数的调用
- 主要特征:函数是“第一等公民”
- 函数与其他数据类型一样的地位,可以赋值给其他变量,也可以作为函数参数、函数返回值
函数式编程最早出现在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 可以成为适用函子