-
8.9 函数返回类型
-
函数参数使用 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>()
函数返回类型需要显式声明
具有块代码体的函数必须始终显式指定返回类型,除非他们旨在返回 Unit。
Kotlin 不推断具有块代码体的函数的返回类型,因为这样的函数在代码体中可能有复杂的控制流,并且返回类型对于读者(有时对于编译器)也是不明显的。#### 返回 Unit 的函数
如果一个函数不返回任何有用的值,它的返回类型是 Unit。Unit 是一种只有一个Unit 值的类型。这个值不需要显式返回:
fun printHello(name: String?): Unit { if (name != null) println("Hello ${name}") else println("Hi there!") // `return Unit` 或者 `return` 是可选的 }
Unit 返回类型声明也是可选的。上面的代码等同于
fun printHello(name: String?) { ..... } for (t in ts) // ts is an Array result.add(t) return result }
允许将可变数量的参数传递给函数:
val list = asList(1, 2, 3)
- 留下你的读书笔记
- 你还没登录,点击这里
-
用户笔记留言