什么时候可以省略Kotlin的退货类型?
我在Kotlin中有以下功能:
fun max(a: Int, b: Int): Int { return if (a > b) a else b }
这可以简化为:
fun max(a: Int, b: Int) = if (a > b) a else b
在前面的定义中,函数的返回类型被省略了,这就是所谓的表达体 。 我想知道是否存在其他可能省略Kotlin函数的返回类型的情况。
块体的函数必须总是明确地指定返回类型,除非它打算让它们返回Unit。
如果一个函数没有返回任何有用的值,它的返回类型是Unit
。 Unit
是只有一个值的单位。 这个值不必显式返回
fun printHello(name: String?): Unit { if (name != null) println("Hello ${name}") else println("Hi there!") // `return Unit` or `return` is optional }
Unit
返回类型声明也是可选的。 上面的代码等同于
fun printHello(name: String?) { ... }
当返回类型是Unit
fun printHello(): Unit { print("hello") }
是相同的
fun printHello() { print("hello") }
也是一样的
fun printHello() = print("hello")
通常,函数必须声明它是返回类型。 但是,如果某些函数由单个表达式组成,那么我们可以忽略大括号和返回类型,并在表达式之前使用=
符号而不是返回关键字。 这种类型的函数被称为单表达式函数 。
例:
fun add(a: Int, b: Int): Int { return a + b }
这段代码可以简化为:
fun add(a: Int, b: Int) = a + b
编译器会强制你这样做。