美文网首页
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