美文网首页
Swift新特性之柯里化函数

Swift新特性之柯里化函数

作者: 请叫我小陈陈 | 来源:发表于2016-07-22 16:20 被阅读0次

    前言

    前段时间在iOS技术群里面有人提到柯里化,当时有点懵,也没有管。最近项目不紧张了,决定来研究研究。顺便和大家分享一下我对Currying的理解。

    什么是柯里化函数?

    柯里化,又称部分求值,是一种函数式编程思想,就是把接收多个参数的函数转换成接收一个单一参数的函数,并且返回一个接受余下参数的新函数技术。

    柯里化函数的运用

    举个简单的例子,下面的函数简单的将输入的数加1:

    func addOne(num : Int) -> Int {
        return num + 1
    }
    

    上面这个函数满足我们的需求,实现了将输入的值加1,但是如果要实现加2,加3,加n呢。这个时候我们需要定义一个通用的函数。有人可能想到传入2个参数的方式去实现,比如说:

    func add(num1 : Int, num2 : Int) -> Int {
        return num1 + num2
    }
    

    当然这种方法是可以的,但是我要向大家推荐的是另一种写法,那就是用函数式编程的思想去解决,也是定义一个函数,这个函数它将接收需要与数字相加的数,并返回一个函数,返回的函数将接收输入数字本身,然后进行操作:

    func addTo(adder: Int)-> Int -> Int {
        return {
            num in
            return num + adder
        }
    }
    let addTwo = addTo(2)//实现一个数加2 ,这里就是接收需要相加的数字,并且返回一个函数 Int -> Int
    let result = addTwo(4)//返回的函数将接收输入的数字,也就是我们这里的4.然后进行操作返回结果
    print(result)//6
    

    如果没有swift开发经验的话,可能看到这里会有点懵,那下面我将换一种简单明了的写法,顺便分享一下它的实现原理:

    //定义一个接收参数num1,返回一个接收参数num2 的函数,并且这个函数的返回值是为Int类型的函数
    func add(num1 : Int) -> (num2 : Int) -> Int {
        //一个接收参数num2的函数,并且有返回结果为Int类型的函数
        return { (num2: Int) -> Int in
            return num1 + num2
        }
    }
    

    使用柯里化函数的注意事项

    1、必须按照参数的定义顺序来调用,否则容易报错
    2、柯里化函数的函数体只会被执行一次,只会在调用完最后一个参数的时候执行柯化里函数体,这个可以打断点调试。

    //不会调用柯里化函数
    let addTwo = addTo(2)//实现一个数加2 ,这里就是接收需要相加的数字,并且返回一个函数 Int -> Int
    print(addTwo)//(Function)
    //执行柯里化函数体
    let result = addTwo(4)//返回的函数将接收输入的数字,也就是我们这里的4.然后进行操作返回结果
    print(result)//6
    

    柯里化函数的优点

    1、代码简洁
    2、提高了代码的复用率
    3、每个函数都是一个单独的模块,很容易进行单元测试
    4、不用修改原来的值,因为返回的都是新的值

    柯里化函数的实用性

    1、实用性一:复用性
    需求1:地图类产品,很多界面都有相同的功能模块,比如搜索框。
    我们可以利用柯里化函数,来组装界面,把界面分成一个个小模块,这样其他界面有相同的模块,直接运用模块代码,去重新组装下就好了。

    2、实用性二:延迟性,柯里化函数代码需要前面的方法调用完成之后,才会来到柯里化函数代码中。
    需求2:阅读类产品,一个界面的显示,依赖于数据,需要加载完数据之后,才能判断界面显示。

    相关文章

      网友评论

          本文标题:Swift新特性之柯里化函数

          本文链接:https://www.haomeiwen.com/subject/ugsijttx.html