Swift函数式编程

2017-03-24  本文已影响0人  张义飞

什么是函数式编程

我们知道面向过程编程,面向对象编程,面向协议编程...大家听说过面向函数编程吗?

函数式编程是种编程范式,它将电脑运算视为函数的计算。函数编程语言最重要的基础是 λ 演算(lambda calculus)。而且λ演算的函数可以接受函数当作输入(参数)和输出(返回值)。和指令式编程相比,函数式编程强调函数的计算比指令的执行重要。和过程化编程相比,函数式编程里,函数的计算可随时调用。

Swift函数式编程 - 函数

高阶函数

一等函数

在面向对象编程中类作为一等公民,在面向函数式编程中函数作为一等公民。

函数柯里化

函数式思维

func filterOddArray() -> [Int] {
    var oddArray: [Int] = []
    for i in 0...10 {
        if i % 2 == 1 {
            oddArray.append(i)
        }
    }
    return oddArray
}

print(filterOddArray())

//打印结果 [1, 3, 5, 7, 9]
let array = [1,2,3,4,5,6,7,8,9,0]
var oddArray = array.filter{$0 % 2 == 1}
print(oddArray)
//打印结果 [1, 3, 5, 7, 9]
public func filter(_ isIncluded: (Element) throws -> Bool) rethrows -> [Element]
extension Array {
    func myFilter(_ isIncluded: (Element) -> Bool) -> [Element] {
        var filterArray: [Element] = []
        for element in self {
            if isIncluded(element) {
                filterArray.append(element)
            }
        }
        return filterArray
    }
}
let array = [1,2,3,4,5,6,7,8,9,0]
var oddArray = array.myFilter{$0 % 2 == 1}
print(oddArray)
//打印结果 [1, 3, 5, 7, 9]
let array = [1,2,3,4,5,6,7,8,9,0]
let sum = array.myFilter{$0 % 2 == 1}.reduce(0) { (total, num) in total + num
}
print(sum)
//打印结果 25
public func reduce<Result>(_ initialResult: Result, _ nextPartialResult: (Result, Element) throws -> Result) rethrows -> Result
extension Array {
    func myReduce<Result>(_ initialResult: Result, _ nextPartialResult: (Result, Element) -> Result) -> Result {
        var sum = initialResult
        for element in self {
            sum = nextPartialResult(sum, element)
        }
        return sum
    }
}
let array = [1,2,3,4,5,6,7,8,9,0]
let sum = array.myFilter{$0 % 2 == 1}.myReduce(0) { (total, num) in total + num
}
print(sum)
//打印结果25
23147344.png

Swift函数编程中的不变性

变量和不变量

var mutable //变量
let immutable = 1 //不变量

不可变类

struct Person {
    let name: String
}

函数式编程Monad

bg2015071604.png bg2015071605.png bg2015071606.png bg2015071607.png bg2015071608.png bg2015071609.png bg2015071610.png bg2015071611.png bg2015071612.png bg2015071613.png bg2015071614.png bg2015071615.png bg2015071616.png bg2015071617.png bg2015071618.png bg2015071619.png bg2015071620.png bg2015071621.png
上一篇 下一篇

猜你喜欢

热点阅读