是否有一种惯用的方法来处理 if else 分支中的空值?

cap*_*wag 2 android if-statement kotlin

我在想是否有一种更简洁的方式来表达这段代码。

return if (response.isSuccessful()) {
    response.body
else null
Run Code Online (Sandbox Code Playgroud)

我在这里指的是else null部分。Kotlin 中几乎类似的语句是

return response?.let {
    it.body
} ?: null
Run Code Online (Sandbox Code Playgroud)

但是在上面的情况下,我们可以在没有该?: null部分的情况下编写相同的代码,编译器会自动分配空值。那么为什么 Kotlin 的 if 语句需要nullelse 部分呢?

return if (response.isSuccessful()) {
    response.body
}
Run Code Online (Sandbox Code Playgroud)

Com*_*are 5

那么为什么 Kotlin 的 if 语句需要一个 null else 部分呢?

因为编译器不知道你要nullelse分支中返回。就其所知,您可能想要做其他事情,例如返回一个随机数,或返回一些默认值,或抛出异常。

但是在上述情况下,我们可以在没有 ?: null 部分的情况下编写相同的代码,编译器会自动分配 null 值。

那是因为安全调用 ( ?.) 的计算结果为null接收者是否为null