美文网首页Swift相关iOS-Swift学习中的Swift
Swift函数柯里化介绍及使用场景

Swift函数柯里化介绍及使用场景

作者: 没故事的卓同学 | 来源:发表于2016-02-16 23:24 被阅读1657次

函数柯里化是函数式编程里的一个重要概念。swift中的柯里化可能很多人都没有了解过,今天给大家介绍一下柯里化的概念和一些使用场景。

定义

柯里化(Currying)是从数学里借用过来的编程语言技法(基于20世纪Haskell Curry等数学家的研究成果)。柯里化指的是从一个多参数函数变成一连串单参数函数的变换。它描述的是变换的过程,不涉及变换之后对函数的调用。调用者可以决定对多少个参数实施变换,余下的部分将衍生为一个参数数目较少的新函数。这个新的函数接收剩下的参数,其内部则指向原始函数。当提供的参数完整了才会最终执行原始函数。

语法

<pre><code>
//普通函数定义

func mutiply(x:Int,y:Int)->Int{

return x*y

}

//柯里化形式

func mutiply(x:Int)(y:Int)->Int{

return x*y

}
</code></pre>
使用如下:
<pre><code>
let twice=mutiply(2)

let result=twice(y: 5) //result等于10

//如果直接在一行里调用就这样写

let result2=mutiply(2)(y: 6)
</code></pre>
例子里的twice的类型是一个闭包,可以粗暴的理解为mutiply的两个参数第一个参数x已经有了个默认值2,twice的参数就是剩下的另一个参数y。

两个细节

  • 只有一个参数,并且这个参数是该函数的第一个参数。必须按照参数的定义顺序来调用柯里化函数。
  • 柯里化函数的函数体只会执行一次,只会在调用完最后一个参数的时候执行柯里化函数体

应用场景

  • 函数工厂
    想象下面向对象编程里的工厂方法。如果有一个工厂返回的是函数,那就正适合柯里化了。



    adder通过柯里化把第一个参数固定为1,返回了一个+1的函数。

  • 隐含参数
    当我们需要频繁调用一个函数,而每次参数的值都差不多的时候,可以运用柯里化来设置隐含参数。
    我们有个连接数据库的方法connectDB,参数是数据库名称和用户,这是一个通用的方法。但是数据库的环境只有测试和正式两个环境,所以利用柯里化生成好连接两个数据库的方法,隐藏了数据库名称这个参数。



    这里其实还可以更进一步,用状态模式封装connectDB,这样外面不用关心当前的环境。


要强调的一个思维的转化是,函数式编程思想,思考的单位不再是对象,而是函数。使用上的区别是,在某个方法里,如果需要这样一个函数,只需要一个声明,外面传递进来。至于这个函数在哪个对象上实现的不需要关心。和面向接口编程更配哦。

欢迎关注我的微博:@没故事的卓同学

相关链接:
Swift中的函数柯里化(Function Currying)
Swift之柯里化函数
函数式编程初探

相关文章

  • Swift函数柯里化介绍及使用场景

    函数柯里化是函数式编程里的一个重要概念。swift中的柯里化可能很多人都没有了解过,今天给大家介绍一下柯里化的概念...

  • Swift 柯里化

    Swift 柯里化 前言:在Swift中,柯里化在业务层的使用比较少,本文旨在介绍基本的柯里化的基本概念和基本使用...

  • vue面试题第十一天

    1:什么是函数柯里化及使用场景 柯里化(Currying)指的是将原来接受两个参数的函数变成新的接受一个参数的函数...

  • 第十二天

    1,什么是函数柯里化及使用场景? 柯里化(Currying)是从数学里借用过来的编程语言技法(基于20世纪Hask...

  • JS函数式编程之柯里化

    JS函数式编程之柯里化 为什么要了解柯里化 柯里化是函数式编程必须要使用的. 这里我们就先介绍下什么是柯里化, 然...

  • 柯里化函数实现

    柯里化函数实现 柯里化函数的实现实质上是一个收集参数的过程, 也许柯里化的内涵及应用场景理解起来比较困难, 但是实...

  • swift 柯里化

    swift 柯里化 柯里化 1、什么是柯里化? 柯里化是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一...

  • swift学习试笔——函数

    swift函数柯里化: func bigThan(a:Int,b:Int) -> Bool { return a ...

  • 柯里化函数介绍

    柯里化实际是把简答的问题复杂化了,但是复杂化的同时,我们在使用函数时拥有了更加多的自由度。 而这里对于函数参数的自...

  • Swift4 中参数类型为元组的单参数函数与多参数函数的类型问题

    这是一个有意思的问题,当时我是在处理函数的柯里化,突然发现了Swift的柯里化函数库(Curry)中的函数参数与我...

网友评论

本文标题:Swift函数柯里化介绍及使用场景

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