第10章 函数
程序中反复执行的代码可以封装到一个代码块中,这个代码块模仿了数学中的函数,具有函数名、参数和返回值,这就是函数。
Kotlin中的函数很灵活,它可以独立于类或接口之外存在,即顶层函数,也就是全局函数,之前接触的main函数就属于顶层函数;也可以存在于别的函数中,即局部函数;还可以存在于类或接口之中,即成员函数。
本章重点介绍Kotlin函数基础内容,而高阶函数和函数类型将在第14章详细介绍。
10.1 函数声明
要使用函数首先需要声明函数,然后在需要的地方进行调用。函数的语法格式如下:
fun 函数名(参数列表) : 返回值类型 {
函数体
return 返回值
}
在Kotlin中声明函数时,关键字是fun,函数名需要符合标识符命名规范;多个参数列表之间可以用逗号(,)分隔,当然也可以没有参数。参数列表语法如图10-1所示,每一个参数一般是由两部分构成:参数名和参数类型。
在参数列表后“: 返回值类型”指明函数的返回值类型,如果函数没有需要返回的数据,则“: 返回值类型”部分可以省略。对应地,如果函数有返回数据,就需要在函数体最后使用return语句将计算的数据返回;如果没有返回数据,则函数体中可以省略return语句。
函数声明示例代码如下:
//代码文件:chapter10/src/com/a51work6/section1/ch10.1.kt
package com.a51work6.section1
fun rectangleArea(width: Double, height: Double): Double
{ ①
val area =width * height
return area ②
}
fun main(args: Array) {
println(“320x480的长方形的面积:${rectangleArea(320.0,480.0)}”) ③
}
上述代码第①行是声明计算长方形的面积的函数rectangleArea,它有两个Double类型的参数,分别是长方形的宽和高,width和height是参数名。函数的返回值类型是Double。代码第②行代码是通过return返回函数计算结果。代码第③行是调用rectangleArea函数。
10.2 返回特殊数据
在函数体中可以通过return语句返回数据,返回数据类型要与函数声明的数据类型保持一致。本节讨论一些特殊的返回数据,其中包括:无返回数据和永远不会正常返回数据。
10.2.1 无返回数据与Unit类型
有的函数只是为了处理某个过程,不需要返回具体数据,例如println函数。此时可以将函数返回类型声明为Unit,相当于Java中的void类型,即表示没有实际意义的数据。
示例代码如下:
//代码文件:chapter10/src/com/a51work6/section2/ch10.2.1.kt
package com.a51work6.section2
fun printArea1(width: Double, height: Double): Unit { //可以省略Unit ①
val area =width * height
println("$width x h e i g h t 长 方 形 的 面 积 : height 长方形的面