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