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