什么时候可以省略Kot​​lin的退货类型?

我在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 

在前面的定义中,函数的返回类型被省略了,这就是所谓的表达体 。 我想知道是否存在其他可能省略Kot​​lin函数的返回类型的情况。

块体的函数必须总是明确地指定返回类型,除非它打算让它们返回Unit。

如果一个函数没有返回任何有用的值,它的返回类型是UnitUnit是只有一个值的单位。 这个值不必显式返回

 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 

编译器会强制你这样做。

Interesting Posts