19. 具名参数和变长参数、默认参数

在写程序的时候,有时我们无法提前预知会有多少个参数传入,这时就是变长参数用武的地方了。
kotlin 的main 函数的数组参数,就是一个不定长度的参数,可以修改为变长参数。
main 常见的样子是这样的

fun main(args: Array) {

}

我们使用变长参数可以让它变成这样

fun main(vararg args: String) {
    
}

这两个写法,在其中填入相同的代码,以证明它们是一样的效果。

    for (arg in args){
        println(arg)
    }

传入参数 1 3 5 7


19. 具名参数和变长参数、默认参数_第1张图片
传入参数

运行结果

1
3
5
7

当我们传入参数的时候,可以不理会函数定义时参数的顺序,这就要用到具名参数了。

fun Hello(vararg ints:Int, str:String){
    println(str)
    ints.forEach(::println)
}

调用这个函数


因为变长参数,最后一个参数不识别了

我们使用具名参数来解决这个问题

Hello(1,3,5,7,9,str = "爱你")

变长参数也可以用另一种方式给入参数的

    var arr = intArrayOf(1,3,5,7,9)
    Hello(*arr, str = "a")

这只适用于Int数组。
如果参数调用时没有传入某些参数,而我们想给这些没有传入的参数一个默认值的话,需要设置默认参数

fun Hello(vararg ints:Int, str:String = "想你"){
    println(str)
    ints.forEach(::println)
}

str:String = "想你" 就是默认参数了
那么调用的地方可以写成

Hello(1,3,5,7,9)

运行结果就成了

想你
1
3
5
7
9

需要注意的是,默认参数如果是第一个的参数位置,调用省略的话,后面的参数给入都要写成具名参数。例如

fun main(vararg args: String) {
    var arr = intArrayOf(1,3,5,7,9)
    Hello(ints = *arr, str = "爱你")
}

fun Hello(ver:String = "3.0", vararg ints:Int, str:String){
    println(ver)
    println(str)
    ints.forEach(::println)
}

运行结果

3.0
爱你
1
3
5
7
9

你可能感兴趣的:(19. 具名参数和变长参数、默认参数)