美文网首页
Kotlin学习之具名参数、变长参数、默认参数的使用

Kotlin学习之具名参数、变长参数、默认参数的使用

作者: 波涛澎湃 | 来源:发表于2018-02-27 23:49 被阅读0次

具名参数

顾名思义,就是在调用函数时显示指定形参的名称,这样即使实参与形参顺序不一致也没有任何影响,因为你已经明确指定了每个参数对应的形参了,例如:

fun main(args: Array<String>) {
    val result1 = division(5.0,2.0)
    val result2 = division(arg2 = 2.0,arg1 = 5.0)//具名参数,与顺序无关
    println("result1=$result1")
    println("result2=$result2")
}

fun division(arg1:Double,arg2:Double):Double{
    return (arg1/arg2)
}
ktArgs.jpg

变长参数

变长参数类似数组,使用vararg关键字标识,同java相似,但又有区别,首先java中的变长参数只能声明在方法形参的末尾,但在kotlin中因为可以使用具名参数来调用方法,所以变长参数可以声明在形参的任意位置,如下:

fun main(args:Array<String>){
    printArray(3,"H","ello"," world",arg2 = "OK")
}
fun printArray(arg1:Int,vararg array:String,arg2:String){
    println("arg1=$arg1")
    array.forEach (::print)
    println("\narg2=$arg2")
}
ktArgs2.jpg
另外在给变长参数传递实参时,我们也可以直接传递一个数组名,使用spread操作符
* 可以将此数组自动展开传入,如上面的代码在调用printArray方法时也可以这样写:
val s = arrayOf("H","ello"," world")
printArray(3,*s,arg2 = "OK")

运行结果跟上面是一样的。唯一不足的是截止目前操作符 * 只支持数组展开,不支持将集合展开。


默认参数

默认参数作用就是可以在调用方法时不给形参传递参数,使该参数值为方法中声明的默认值;如上面方法的声明可以写成下面的形式

fun printArray(arg1:Int=3,vararg array:String,arg2:String="OK"){
    println("arg1=$arg1")
    array.forEach (::print)
    println("\narg2=$arg2")
}

则如果调用时是这样的:

fun main(args:Array<String>){
    val s = arrayOf("H","ello"," world")
    printArray(array=*s) //只给中间的可变参数赋值,其他参数自动赋值默认值
}

那么运行结果依然不变,如下


ktArgs3.jpg

相关文章

网友评论

      本文标题:Kotlin学习之具名参数、变长参数、默认参数的使用

      本文链接:https://www.haomeiwen.com/subject/cxsvxftx.html