🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 返回和跳转 Kotlin 有三个结构跳转操作符 * `return`。默认从最近的封闭的函数或[匿名函数](lambdas.html#anonymous-functions)返回。 * `break`。终止最近的封闭循环 * `continue`。继续最近的封闭循环的下一点。 ## 终止和继续标签 Kotlin 中的一些表达式可以与一个标签一起标记。标签的形式是标识后紧跟 `@` 符号,例如:`abc@`、`fooBar@`是合法的标签(查看[grammar](grammar.html#label))。要标注一个表达式,我们只要放置一个标签在它前面 ``` kotlin loop@ for (i in 1..100) { // ... } ``` 现在我们可以合法带标签 `break` 或 `continue`: ``` kotlin loop@ for (i in 1..100) { for (j in 1..100) { if (...) break@loop } } ``` 一个合法的带标签 `break` 会跳转到被标签标记右边的循环之后的点执行。 `continue` 会从那个循环的下一个迭代继续。 ## 在标签处返回 在 Kotlin 里本地函数和对象表达式、函数可以与函数常量一起嵌套。合法的 `return` 允许我们返回一个外部的函数。最重要的使用场景是从一个 lambda 表达式返回。记得我们写下这个的时候: ``` kotlin fun foo() { ints.forEach { if (it == 0) return print(it) } } ``` 这个 `return` 表达式从最近的封闭函数返回,也就是说 `foo`。(注意这样的无局部返回只支持 lambda 表达式传递给[内联函数](inline-functions.html))。如果我们需要从一个 lambda 表达式返回,我们就得标注它并合法地 `return`: ``` kotlin fun foo() { ints.forEach lit@ { if (it == 0) return@lit print(it) } } ``` 现在它只从 lambda 表达式返回。它常常更方便地使用隐式标签:这样的标签有和 lambda 传递的函数名相同的名字。 ``` kotlin fun foo() { ints.forEach { if (it == 0) return@forEach print(it) } } ``` 另外,我们可以把 lambda 表达式换成一个[匿名函数](lambdas.html#anonymous-functions)。位于匿名函数中的 `return` 指令将从匿名函数自身返回。 ``` kotlin fun foo() { ints.forEach(fun(value: Int) { if (value == 0) return print(value) }) } ``` 也就是说,当返回一个值时,解析器会给合法的返回以优先权。 ``` kotlin return@a 1 ``` 意思是“标签 `@a` 返回 1 ”而不是“返回一个标签表达式 `@a 1`”。