Returns and Jumps
2017-06-23 本文已影响7人
b7cda9616c52
Kotlin 有三种跳跃的表达式:
- return
- break
- continue
都可以用在表达式里:
val s = person.name ?: return
Break and Continue Labels
Kotlin 中所有表达式都可以定义标签,语法。
loop@ for (i in 1..100) {
// ...
}
使用 break
或 continue
跳转到标签指定的位置:
loop@ for (i in 1..100) {
for (j in 1..100) {
if (...) break@loop
}
}
这里的 break
会结束两层循环,使用 continue
只是结束当前循环,不会影响后面的循环。
Return at Labels
Kotlin 中函数可以嵌套,在内部闭包函数中使用 return
结束整个函数:
fun foo() {
arrayListOf<Int>(0, 1,2,3,4,5).forEach {
if (it == 3) return
println(it)
}
println("不会输出")
}
结果:012
也可以不结束整个函数,跳过某个过程。如下,跳过 it == 3
的过程:
fun foo() {
arrayListOf<Int>(0, 1,2,3,4,5).forEach lit@ {
if (it == 3) return@lit
println(it)
}
println("执行了")
}
结果:01245执行了
也可简单的使用函数名作为标签:
fun foo() {
arrayListOf<Int>(0, 1,2,3,4,5).forEach {
if (it == 0) return@forEach
print(it)
}
println("执行了")
}
结果:12345执行了
上面的都是lambda表达式的写法,也可以使用匿名函数:
fun foo() {
arrayListOf<Int>(0, 1,2,3,4,5).forEach(fun(value: Int) {
if (value == 0) return
print(value)
})
}
结果:12345执行了
When returning a value, the parser gives preference to the qualified return, i.e.
return@a 1
means "return 1
at label @a
" and not "return a labeled expression (@a 1
)".