当前位置:嗨网首页>书籍在线阅读

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)    //伸展操作符,在数组前面加*