链式编程、函数式编程

2019-06-26  本文已影响0人  写一本2000000的书

一.链式编程

定义:是将多个操作(多行代码)通过点号"."链接在一起成为一句代码。

核心:声明一个Block的属性;这个block返回值必须还是一个对象(根据业务需求不同,可以返回的是这个对象实例本身,也可以是这个类的另一个实例,更可以是另一个类的实例对象)。

二.函数式编程

定义:把操作尽量写成一系列嵌套函数或者方法调用。

核心:每个方法必须返回值是本身对象,把函数或者block当做参数

Block参数:(需要操作的值)
Block返回值:(操作结果)
补充:
合成:如果一个值要经过多个函数,才能变成另外一个值,就可以把所有中间步骤合并成一个函数,这叫做函数的合成
柯里化:柯里化,就是把一个多参数的函数,转化为单参数函数
类型 作手点 特点
链式编程 属性 声明一个block属性, block返回值必须还是一个对象
函数式编程 方法 每个方法必须返回值是本身对象,把函数或者block当做参数。

链式编程示例

//
//  CalculatorMaker.swift
//  链式编程示例
//
//  Created by apple on 2018/11/27.
//  Copyright © 2018 apple. All rights reserved.
//

import UIKit

class CalculatorMaker: NSObject {
    var result : Int = 0
    
    func add(num : Int)-> CalculatorMaker {
        result += num
        return self
    }
    
    func sub(num : Int)-> CalculatorMaker {
        result -= num
        return self
    }
    
}

class Calculator {
    static func beginCalculator( calculatorBlock:(CalculatorMaker)->()) -> Int {
        let calculator = CalculatorMaker()
        calculatorBlock(calculator)
        return calculator.result
    }
}

let result = Calculator.beginCalculator { (calculator) in
            _ = calculator.add(num: 1).sub(num: 2)
        }
        
        print("result-----\(result)")

函数式编程示例

//
//  Caculator.swift
//  函数式编程示例
//
//  Created by apple on 2018/11/27.
//  Copyright © 2018 apple. All rights reserved.
//

import UIKit

class Caculator: NSObject {

    var result:Int = 0
    var isEqule:Bool = false
    
    
    /// 加法运算
    ///
    /// - Parameter operation: 参数`operation` block, result 操作的值, block 返回值即是操作结果
    /// - Returns: 返回 `Caculator` 对象
    func add(operation: (_ result:Int) -> Int) -> Caculator {
        result = operation(result)
        return self
    }
    
    /// 减法运算
    ///
    /// - Parameter operation: 参数`operation` block, result 操作的值, block 返回值即是操作结果
    /// - Returns: 返回 `Caculator` 对象
    func minus(operation: (_ result:Int) -> Int) -> Caculator {
        result = operation(result)
        return self
    }
    
    /// 乘法运算
    ///
    /// - Parameter operation: 参数`operation` block, result 操作的值, block 返回值即是操作结果
    /// - Returns: 返回 `Caculator` 对象
    func multiply(operation: (_ result:Int) -> Int) -> Caculator {
        result = operation(result)
        return self
    }
    
    /// 除法运算
    ///
    /// - Parameter operation: 参数`operation` block, result 操作的值, block 返回值即是操作结果
    /// - Returns: 返回 `Caculator` 对象
    func divide(operation: (_ result:Int) -> Int) -> Caculator {
        guard result != 0 else {
            result = 0
            return self
        }
        result = operation(result)
        return self
    }
    
    
    func isEqual(operation: (_ result:Int) -> Bool) -> Caculator {
        isEqule = operation(result)
        return self
    }
    
}

// 什么是函数式编程思想:把一个操作写成一系列的方法
        // 需求:写一个计算器,并且计算器的结果是否等于100
       let isEqule = Caculator.init().add { (result) -> Int in
            print("return:\(result)")
            return result + 100
        }.multiply { (number1) -> Int in
                return number1 * 100
        }.isEqual { (result) -> Bool in
                return result == 110
        }.isEqule
    
        print("result-----\(isEqule)")
上一篇下一篇

猜你喜欢

热点阅读