您的位置:首页 > 其它

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

2017-05-27 12:04 260 查看
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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Kotlin