您的位置:首页 > 产品设计 > UI/UE

Kotlin 中的 return、break 和 continue

2017-06-24 16:49 477 查看
地址:http://kotlinlang.org/docs/reference/returns.html

日期:2017年 06月 24日 星期六

译者:Linky

返回和跳转

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

—— return

—— break

—— continue

所有这三个表达式都可以作为更大表达式的一部分:

val s = person.name ?: return


这些表达式的类型是 Nothing type

Break 和 Continue 标签

Kotlin 中的任意表达式都可以标记为一个 label。Label 由一个标记符跟上
@
符号构成。

例如
abc@
fooBar@
,为了标记一个表达式,我们只需要在它前面加一个 label 即可。

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


现在,我们可以使用 label 来限制一个 break 或者一个 continue 语句:

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


break 将跳转到循环结束后的下一行作为执行入口,continue 将继续执行这个循环的下一个迭代。

Return Label

在 Kotlin 中,函数可以被嵌套。returns 允许我们从更外层的函数中返回。最重要的使用场景是从

一个 lambda 表达式中返回。回忆一下,当我们写这个的时候:

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


return 表达式将从最外层函数中返回,例如
foo
。如果我们想仅仅从 lambda 表达式中返回,我们必须

给它加上标签。

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


现在它将仅仅从 lambda 表达式中返回。同样情况下,使用 隐式标签会更方便一点,这个标签

和向 lambda 表达式传入的 函数有相同的名字。

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


此外,我们还可以用 匿名函数 来替换 lambda 表达式,匿名函数中的 return 语句将只退出

该匿名函数。

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


当返回一个值时,解析器会给 return 一个引用,例如:

return@a 1


这意味着,在 label @a 返回 1,而不是返回一个表达式
(@a 1)


PS: 上面这段话我也没看懂,希望知道的朋友可以解释一下^_^
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  kotli break continue