返回和跳转
Kotlin 有三种结构化跳转表达式:
- return 默认从最直接包围它的函数或者匿名函数返回
- break 终止最直接包围它的循环
- continue 继续下一次最直接包围它的循环
在 Kotlin 中任何表达式都可以用标签(label)来标记,标签的格式为标识符后跟 @ 符号,例如:abc@ 、fooBar@ 都是有效的标签
fun main(args: Array<String>) {
fun1()
}
fun fun1() {
val list = listOf(1, 4, 6, 8, 12, 23, 40)
loop@ for (it in list) {
if (it == 8) {
continue
}
if (it == 23) {
break@loop
}
println("value is $it")
}
println("function end")
}
value is 1
value is 4
value is 6
value is 12
function end
Kotlin 有函数字面量、局部函数和对象表达式。因此 Kotlin 的函数可以被嵌套
标签限制的 return 允许我们从外层函数返回,最重要的一个用途就是从 lambda 表达式中返回
。通常情况下使用隐式标签更方便,该标签与接受该 lambda 的函数同名
fun main(args: Array<String>) {
fun1()
println("-------------")
fun2()
println("-------------")
fun3()
println("-------------")
fun4()
}
fun fun1() {
val list = listOf(1, 4, 6, 8, 12, 23, 40)
list.forEach {
if (it == 8) {
return
}
println("value is $it")
}
println("function end")
}
fun fun2() {
val list = listOf(1, 4, 6, 8, 12, 23, 40)
list.forEach {
if (it == 8) {
return@fun2
}
println("value is $it")
}
println("function end")
}
//fun3() 和 fun4() 中使用的局部返回类似于在常规循环中使用 continue
fun fun3() {
val list = listOf(1, 4, 6, 8, 12, 23, 40)
list.forEach {
if (it == 8) {
return@forEach
}
println("value is $it")
}
println("function end")
}
fun fun4() {
val list = listOf(1, 4, 6, 8, 12, 23, 40)
list.forEach loop@ {
if (it == 8) {
return@loop
}
println("value is $it")
}
println("function end")
}
value is 1
value is 4
value is 6
-------------
value is 1
value is 4
value is 6
-------------
value is 1
value is 4
value is 6
value is 12
value is 23
value is 40
function end
-------------
value is 1
value is 4
value is 6
value is 12
value is 23
value is 40
function end