04-函数参数
11.1.3 函数参数
函数参数的定义使用Pascal标记法, 也就是name: type的格式。对于有多个参数的情况,参数之间用逗号隔开,而且每个参数必须指明类型。
fun powerOf(number: Int, exponent: Int) {
//函数体
}
与其他语言相比,Kotlin允许给参数设置默认值,当对应的参数被省略的时候就会使用默认值,这种功能大大地减少了重载函数定义的次数。
fun read(b:Array<Byte>,off:Int=0,len;Int=b.size()){
…
}
调用包含多个参数的函数时,可以通过指定参数名来调用该函数。代码如下。
fun register(name: String, no: Int = 1001, sex: Int = 0) {
println("name: $name, no:$no, sex: $sex")
}
fun main(args: Array<String>) {
register("jack")
//等价于
register("jack ", 1001, 0)
}
如果调用的参数个数不确定,可以采用不定量参数方式,将函数定义为参数列表,并使用vararg修饰符标记。
fun <T> asList(vararg ts: T): List<T> {
val result = ArrayList<T>()
for (t in ts) // ts是一个数组
result.add(t)
return result
}
asList函数是一个泛型函数,该函数可以接收任意多个参数,并且参数是可变的。
val list =asList(1,2,"a",3)
一个函数中只允许声明一个vararg参数,而且使用vararg标记的参数不一定是最后一个。如果vararg标记的参数不是最后一个,那么vararg参数之后的其他参数可以使用命名参数语法来传递参数值;如果参数类型是函数,那么也可以在括号之外传递一个Lambda表达式。
fun fruit(vararg fruits: String, addr: String) {
for (fruit in fruits) {
println("fruit:$fruit, addr: $addr")
}
}
fun main(args: Array<String>) {
fruit("苹果", "橘子", addr = "上海")
}
运行上面的代码,输出的结果如下。
fruit:苹果, addr: 上海
fruit:橘子, addr: 上海
当调用一个含有vararg参数的函数时,可以逐个进行参数值传递,例如 asList(1, 2, 3)。如果希望将一个已有数组的内容传递给该函数,可以使用伸展操作符。
val a = arrayOf(1, 2, 3)
val list = asList(-1, 0, *a, 4) //伸展操作符,在数组前面加*