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

函数式编程最早出现在LISP语言,绝大部分的现代编程语言也对函数式编程做了不同程度的支持比如: Swift,JavaScript, Python, Kotlin,Haskell, Scala等

函数作为Swift的一等公民

特征:函数与其他数据类型一样的地位,可以赋值给其他变量,也可以作为函数参数,函数返回值

函数式编程中最常用的概念:

传统的加法函数

// 如果函数体只有一行,可以把return省略掉
func add(a: Int, b: Int) -> Int {
    a + b
}

函数式编程思想: 函数高度可复用

// 如果函数体只有一行,可以把return省略掉
func add(a: Int) -> (Int) -> Int {
    return { a + $0 }
}

func add(a: Int) -> (Int) -> Int {
    a + $0
}

// 调用示例
// 获取这个函数
let fn = add(a: 3)
// 调用这个函数
let result = fn(3)
print(result)

// 连续调用
let result = add(a: 3)(3)

函数合成,传递两个函数作为参数,返回一个函数

func composite(fn1: @escaping (Int) -> Int,
               fn2: @escaping (Int) -> Int)
    -> (Int) -> Int {
    
        { fn2(fn1($0)) }
}

高阶函数(Higher-Order Function)

高阶函数是至少满足下列一个条件的函数

柯里化(Currying)

将一个多参数的函数变化为只接受单个参数的函数,如上示例