请选择 进入手机版 | 继续访问电脑版
本站特色:极好的技术研究氛围!所有技术发帖,必有回复! 做最受欢迎的Java论坛

疯狂Java联盟

 找回密码
 加入联盟
查看: 38|回复: 0

[Android] 使用函数类型——Kotlin高阶函数之一

  [复制链接]
发表于 2017-11-26 19:16:46 | 显示全部楼层 |阅读模式
Kotlin不是纯粹的面向对象语言,Kotlin的函数也是一等公民,因此函数本身也具有自己的类型。函数类型就像前面介绍的数据类型一样,既可用于定义变量,也可用作函数的形参类型,还可作为函数的返回值类型。

Kotlin的每个函数都有特定的类型,函数类型由函数的形参列表、->和返回值类型组成。例如如下函数:
func foo(a : Int , name:String) -> String{
        ...
}

该函数的形参列表、->和返回值类型为(Int , String) -> String,这就是该函数的类型。
例如如下函数:
func bar(width:Double , height: Double){
        ...
}
该函数的形参列表、->和返回值类型为(Double , Double) -> Unit或(Double , Double),这就是该函数的类型。
再例如如下函数:
func test(){
        ...
}
该函数的形参列表、->和返回值类型为() ->Unit或(),这就是该函数的类型。
掌握了函数类型之后,接下来就可以使用函数类型定义变量了—就像使用普通类型定义变量一样。例如如下代码。
程序清单:codes\06\6.3\FunctionTypeTest.kt
// 定义一个变量,其类型为(Int , Int) -> Int
var myfun : (Int , Int) -> Int
// 定义一个变量,其类型为(String)
var test : (String)
定义函数类型的变量之后,接下来程序即可将函数赋值给该变量。例如如下程序(程序清单同上):
// 定义一个计算乘方的函数
fun pow(base: Int , exponent:Int) : Int {
        var result = 1
        for( i in 1 .. exponent) {
                result *= base
        }
        return result
}
// 将pow函数赋值给myfun,则myfun可当成pow使用
myfun = ::pow
println(myfun(3 , 4)) // 输出81
// 定义一个计算面积的函数
fun area(width: Int, height:Int) : Int {
        return width * height
}
// 将area函数赋值给myfun,则myfun可当成area使用
myfun = ::area
println(myfun(3, 4)) // 输出12
从上面代码可以看出,程序可以依次将pow()、area()函数赋值给myfun变量——只要被赋值的函数类型与myfun的变量类型一致,程序就可以赋值成功。
当直接访问一个函数的函数引用,而不是调用函数时,需要在函数名前增加两个冒号,而且不能在函数后面添加圆括号——一旦增加圆括号,就变成了调用函数,而不是访问函数引用。
通过使用函数类型的变量,可以让myfun在不同的时间指向不同的函数,从而让程序更加灵活。由此可见,使用函数类型的好处是让程序更加灵活。
除此之外,程序还可使用函数类型作为形参类型和使用函数类型作为返回值类型。


您需要登录后才可以回帖 登录 | 加入联盟

本版积分规则

视频、代码、电子书下载
请关注"疯狂图书"公众号
QQ交流1群: 545923995  未满

小黑屋|手机版|Archiver|疯狂Java联盟 ( 粤ICP备11063141号 )

GMT+8, 2017-12-18 20:36 , Processed in 0.290047 second(s), 6 queries , File On.

快速回复 返回顶部 返回列表