Swift_currying(柯里化)

一. Currying解释

  1. currying 翻译为局部套用.又称为部分求值(Partial Evaluation), 是一种函数式编程思想,在Swfit4.0的 时候已经废弃了函数的柯里化. 函数的 currying 特性的使用场景并不大,但他会增加很多语言的复杂性,所以需要删除它,但是柯里化函数式编程思想还是很重要的.
  1. 特点:
    只用“表达式”(表达式:单纯的运算过程,总是有返回值),不用“语句”(语句:执行某种操作,没有返回值)。2.不修改值,只返回新值。
  1. 好处:
    代码简洁
    提高代码复用性
    代码管理方便,相互之间不依赖,每个函数都 是一个独立的模块,很容易进行单元测试。
    易于“并发编程”,因为不修改变量的值,都是返回新值。
    最大的好处就是能把函数当参数用!!

二. 代码示例

需求: 需要三个函数.

  • 第一个函数,在自身上+1.
  • 第一个函数,在自身上+2.
  • 第一个函数,在自身上+3.
    func addTo(_ adder : Int) -> (Int) -> Int {
        return {
            num in
            return num + adder
        }
    }

   // 使用
   let addOne = addTo(1000)
   let result_one = addOne(1)
   print(result_one)       
    /**
         addTo(1000) 返回一个闭包 (Int) -> Int
         num in 的意思是: 用in把参数和方法隔开. num就是闭包的入参(Int)
         该闭包里面执行的是 return num + adder.
   */
// 这是一个字符串的示例
    func strAppends(_ a : String) -> (String) -> String {
        return {
            b in
            return a + b
        }
    }
将一个普通的三个入参的函数转化为柯里化函数
    func add(a: Int, b: Int, c: Int) -> Int{
        print("\(a) + \(b) + \(c)")
        return a + b + c
    }
    func add(_ a: Int) -> (Int) -> (Int) -> Int{
        return {
            b in
            return {
                c in
                a + b + c
            }
        }
    }

   // 使用
   let one = add(1)
   let result = one(2)(3)
   print(result)
没有返回值的
    func printString(_ month : Int) -> (Int) -> (String) -> Void {

        return {
            day in
            return {
                action in
                print("\(month)月" + "\(day)日" + "\(action)")
            }
        }
    }

// 使用
printString(8)(25)("我想找个对象")
// 输出:  8月25日我想找个对象

你可能感兴趣的:(Swift_currying(柯里化))