# 返回和跳转
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`”。