概述
许多程序设计语言(像C和C++)用函数这个术语来描述命名子程序;在Kotlin中,依然延续这个术语来表示“做某些事情的方式”,实际上把它当作java中的方法是一样的,只不过是命名方式的不同而已,没有什么实际意义。
函数声明
Kotlin中的函数决定了一个对象能够接收到什么样的信息,函数的基本组成部分包括:名称、参数、返回值和函数体,其使用fun关键字定义函数,定义形式为:
fun methodName(param: paramType): ReturnType {
}
- 返回类型描述的是在调用函数之后从函数返回的值。
- 参数列表给出了要传递给函数的信息的类型和名称
- 函数名和参数列表作为函数的唯一的标识符
参数
函数参数的定义使用Pascal标记法, 也就是, name: type 的格式,多个参数之间使用逗号分隔,每个参数都必须明确指定类型.
fun powerOf(number: Int, exponent: Int) {
...
}
默认参数
函数参数可以指定默认值, 当参数省略时, 就会使用默认值. 与其他语言相比, 这种功能使得我们可以减少大
量的重载(overload)函数定义.
fun main(args: Array<String>) {
// 使用默认值
doSwim() //打印: "do swim"
// 使用传递的参数
doSwim("just do it") // 打印:"just do it"
}
fun doSwim(sports: String = "do swim") {
println(sports)
}
参数默认值的定义方法, 在参数类型之后, 添加 = 和默认值.
命名参数
调用函数时, 可以通过参数名来指定参数. 当函数参数很多, 或者存在默认参数时, 指定参数名是一种非常便利的功能.
有这样一个函数:
fun register(name: String, no: Int = 1001, sex: Int = 0) {
println("name: $name, no:$no, sex: $sex")
}
当我们采用默认方式调用时,如果未设定的参数,位于参数列表的第一个,我们可以这样调用
register("li")
其实际上相当于
register("li", 1001, 0)
人如果我们不需要指定所有的参数, 只是修改部分默认的参数值,我们可以这样:
register(name = "wang", no = 1003)
不定数量参数
如果在函数被调用以前,函数的参数(通常是参数中的最后一个)个数不能够确定,可以采用不定量参数方式,定义函数参数列表。比如在创建List时,创建前并不知道预添加至List中多少数据。
fun <T> asList(vararg ts: T): List<T> {
val result =