Kotlin 具名参数&可变参数

code in kotlin.jpg
具名参数
  • 给函数的实参附上形参

  • 举例:

      fun sum(arg1: Int, arg2: Int) = arg1 + arg2
      
      sum(arg1 = 1, arg2 = 2)
    

变长参数

vararg 关键字,参数长度可变化

  • 某个参数可以接受多个值

      fun hello(vararg ints: Int) {
          ints.forEach(::println)
      }
      
       hello(1,2,3,4,5)
    
  • 因为在kotlin里有具名参数,所以可以不为最后一个参数,可以在参数列表里的任意位置(Java里只能是最后一个参数)

  • 如果传参数时有歧义,则需要使用具名参数 (当变长参数前面有参数时,如果编译器能识别出来可以不用具名参数传入了,如果在其后面有参数时,则要使用具名参数指定类型传入了)

     fun hello(double: Double, vararg ints: Int, string: String) {
         println(double)
         ints.forEach(::println)
         println(string)
     }
     
     hello(1.0, 1, 2, 3, 4, 5, string = "hello")
     
     double 编译器可以识别出来类型
     string 编译器提示使用具名参数传入
    

Spread Operator

  • 只支持展开Array

  • 只用于变长参数列表的实参

  • 不能重载

      fun hello(double: Double, vararg ints: Int, string: String) {
          println(double)
          ints.forEach(::println)
          println(string)
      }
      
      val array = intArrayOf(1, 2, 3, 4, 5)
      hello(3.0, *array, string = "hello")
      
      array 前面加 *
    
默认参数
  • 为函数参数指定默认值

  • 可以为任意位置的参数指定默认值

  • 传参时,如果有歧义,需要使用具名参数

      fun world(double: Double = 3.0, vararg ints: Int, string: String) {
          println(double)
          ints.forEach(::println)
          println(string)
      }
      
      world(ints = *intArrayOf(1, 2, 3, 4, 5), string = "world")
      第一个参数指定的默认参数,调用时可以省略不传 
      
      fun world(double: Double, vararg ints: Int, string: String = "world")
      world(3.0, *array)
      如果默认参数在最后一个,不会产生歧义

你可能感兴趣的:(Kotlin 具名参数&可变参数)