什么时候可以在Kotlin中省略返回类型

时间:2017-05-21 05:58:18

标签: kotlin expression-body

我在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中省略函数返回类型的情况。

3 个答案:

答案 0 :(得分:2)

具有块体的函数必须始终明确指定返回类型,除非它们旨在让它们返回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?) {
    ...
}

答案 1 :(得分:1)

当返回类型为Unit

fun printHello(): Unit {
    print("hello")
}

相同
fun printHello() {
    print("hello")
}

也与

相同
fun printHello() = print("hello")

答案 2 :(得分:1)

通常,函数必须声明它的返回类型。但是如果某些函数由单个表达式组成,那么我们可以省略大括号和返回类型,并在表达式之前使用=符号而不是return关键字。这种类型的函数称为单表达式函数

示例:

fun add(a: Int, b: Int): Int {
    return a + b
}

此代码可简化为:

fun add(a: Int, b: Int) = a + b

编译器会强制您执行此操作。