fun trueOrFalse(exp: Boolean): String { 
  if (exp) return "It's true!" 
  return "It's false"            
}

我在读《原子kotlin》一书,书中说这个函数包含2个表达式,所以我只想知道函数返回也是kotlin中的表达式吗?

推荐答案

与大多数编程语言不同,Kotlin将return ...视为表达式而不是语句.

编译器为此类表达式推断的类型为Nothing,这意味着该表达式永远不会计算为任何值,并且在此类表达式之后,控制流永远不会正常继续(类似于throw个表达式).

一个证明它是表达式的例子是:

val x = when (coin) {
    0 -> 123
    1 -> (return 456) as Nothing
    else -> error("unexpected coin value")
}

(runnable sample)

return ...表达式的类型为Nothing,将其用作其他复合表达式的一部分没有多大意义.然而,在某些情况下,它是方便的:

  • val x = if (foo) bar() else return baz()
  • val x = foo() ?: return bar()

有趣的事实:像return return return 5这样的表达式是有效的,尽管它们会触发编译器警告无法访问的代码.

Kotlin相关问答推荐

编译后的JavaFX应用程序立即以静默方式崩溃

在Kotlin中,我是否可以访问已知的WHEN子句值?

在Spring Boot应用程序中使用网络请求功能将关键字挂起作为冗余

为什么在jacksonObjectMapper上将DeserializationFeature.FAIL_ON_IGNORED_PROPERTIES设置为false无效?

Ktor 在 Heroku 上的 CORS 问题,但在本地没有

init中的NPE抽象函数变量

将一个列表元素分组为多个组(indexBy)

匹配在单词边界上包含特殊字符的变量字符串的正则表达式

如何从 kotlin 函数中 Select 正确的枚举值

在 Kotlin 中,::class.simpleName是做什么的?

为什么 Kotlin 需要函数引用语法?

如何在 Kotlin 中判断数组类型(不是泛型类型)

在 Kotlin 中实现 (/inherit/~extend) 注解

Kotlin suspend fun

如何解决:将Java类转换为Kotlin后出现error: cannot find symbol class ...?

是否在Kotlin中重写enum toString()?

Kotlin的BiMap/2-way hashmap

TypeConverter()在Android的TypeConverter错误中具有私有访问权限

如何在伴随对象中使用泛型

Android Jetpack Compose - 图像无法zoom 到框的宽度和高度