-
8.8 函数参数
-
函数参数使用 Pascal 表示法定义,即 name: type。参数用逗号隔开。每个参数必须显式指定其类型。
fun powerOf(number: Int, exponent: Int): Int { return Math.pow(number.toDouble(), exponent.toDouble()).toInt() }
测试代码:
val eight = powerOf(2, 3) println("powerOf(2,3) = $eight")
输出:powerOf(2,3) = 8
默认参数
函数参数可以有默认值,当省略相应的参数时使用默认值。这可以减少重载数量。
fun add(x: Int = 0, y: Int = 0): Int { return x + y }
默认值通过类型后面的 = 及给出的值来定义。
测试代码:
val zero = add() val one = add(1) val two = add(1, 1) println("add() = $zero") println("add(1) = $one") println("add(1, 1) = $two")
输出:
add() = 0 add(1) = 1 add(1, 1) = 2
另外,覆盖带默认参数的函数时,总是使用与基类型方法相同的默认参数值。
当覆盖一个带有默认参数值的方法时,签名中不带默认参数值:
open class DefaultParamBase { open fun add(x: Int = 0, y: Int = 0): Int { return x + y } } class DefaultParam : DefaultParamBase() { override fun add(x: Int, y: Int): Int { // 不能有默认值 return super.add(x, y) } }
命名参数
可以在调用函数时使用命名的函数参数。当一个函数有大量的参数或默认参数时这会非常方便。
给定以下函数
fun reformat(str: String, normalizeCase: Boolean = true, upperCaseFirstLetter: Boolean = true, divideByCamelHumps: Boolean = false, wordSeparator: Char = ' ') { }
我们可以使用默认参数来调用它
reformat(str)
然而,当使用非默认参数调用它时,该调用看起来就像
reformat(str, true, true, false, '_')
使用命名参数我们可以使代码更具有可读性
reformat(str, normalizeCase = true, upperCaseFirstLetter = true, divideByCamelHumps = false, wordSeparator = '_' )
并且如果我们不需要所有的参数
reformat(str, wordSeparator = '_')
可变数量的参数(Varargs)
函数的参数(通常是最后一个)可以用 `vararg` 修饰符标记:
fun <T> asList(vararg ts: T): List<T> { val result = ArrayList<T>() for (t in ts) // ts is an Array result.add(t) return result }
允许将可变数量的参数传递给函数:
val list = asList(1, 2, 3)
- 留下你的读书笔记
- 你还没登录,点击这里
-
用户笔记留言