Kotlin 官方学习教程之返回和跳转

来源:互联网 发布:淘宝购物省钱技巧 编辑:程序博客网 时间:2024/06/05 22:59

Kotlin 有三个结构跳转表达式:

  • return 默认从最近的封闭函数或匿名函数返回

  • break 终止最近的封闭循环

  • 前往最近的封闭循环的下一步

所有这些表达式都可以用作更大表达式的一部分:

val s = person.name ?: return

Break 和 Continue 标签

在 Kotlin 中表达式可以添加标签。标签通过 @ 结尾来表示,比如:abc@,fooBar@ 都是有效的。使用标签语法只需像这样:

loop@ for (i in 1..100){    // ...}

现在我们可以用标签实现 break 或者 continue 的快速跳转:

loop@ for (i in 1..100) {    for (j in 1..100) {        if (...) break@loop    }}

break 是跳转标签后面的表达式,continue 是跳转到循环的下一次迭代。

在标签返回

使用字面函数,局部函数,以及对象表达式中,函数可以在 Kotlin 中被嵌套。return 允许我们返回到外层函数。最重要的用例是从lambda表达式返回。回想一下,当我们写这个:

fun foo() {    ints.forEach {        if (it == 0) return        print(it)    }}

return 表达式返回到最近的闭合函数,比如 foo (请注意,这种非本地返回仅适用于传递给内联函数的 lambda 表达式)。如果我们需要从 lambda 表达式返回,我们必须对它进行标注并限定返回值:

fun foo() {    ints.forEach lit@ {        if (it == 0) return@lit        print(it)    }}

现在,它仅仅从 lambda 表达式返回。通常,使用 implicits 标签更方便:这样的标签与传递 lambda 的函数具有相同的名称。

fun foo() {    ints.forEach {        if (it == 0) return@forEach        print(it)    }}

另外,我们可以使用匿名函数来代替 lambda 表达式。

fun foo() {    ints.forEach(fun(value: Int) {        if (value == 0) return        print(value)    })}

当返回值时,解析器优先考虑符合的返回值,即:

return@a 1

表示 “在标签 @a 返回 1 ” 而不是返回一个标签表达式 (@a 1)