在Java的循环体中:
可以用break跳出最里层的循环(若想跳出外层循环可以用标签);
可以用continue跳过当前层循环,不再执行循环体中continue语句之后的代码,直接进行下一次循环;
可以用return跳出循环体所在的方法,相当于结束该方法;
那在kotlin中呢?
Kotlin中的for循环仅以唯一一种形式存在,和Java的for-each循环一致。在for循环中可以正常使用break、continue、return来达到预期效果。
如:
fun test() {
val indexes = arrayOf(1, 2, 3, 4, 5, 6, 7)
for (i in indexes) {
if (i == 3) {
// continue
// break
return
}
println("test: $i")
}
println("test-for循环结束")
}
但是在关于循环的高阶函数中就不一样了,下面以函数forEach进行介绍。在forEach中是无法使用break,continue,当你敲出break、continue编译器会报错,为什么呢?因为编译器无法识别出循环体,故无法使用。这话可不是我编的~~~
fun test() {
val indexes = arrayOf(1, 2, 3, 4, 5, 6, 7)
indexes.forEach { i ->
if (i == 3) {
// continue 编译器会报错
// break 编译器会报错
return // 跳出循环体所在的方法,test方法结束
}
println("test: $i")
}
println("forEach循环结束")
}
打印结果如下:
那如何才能continue,break呢
continue:
fun test() {
val indexes = arrayOf(1, 2, 3, 4, 5, 6, 7)
indexes.forEach { i ->
if (i == 3) {
return@forEach // continue
}
println("test: $i")
}
println("forEach循环结束")
}
}
fun test() {
val indexes = arrayOf(1, 2, 3, 4, 5, 6, 7)
indexes.forEach kotlinContinue@{ i ->
if (i == 3) {
return@kotlinContinue // 返回到自定义的标签kotlinContinue,continue
}
println("test: $i")
}
println("forEach循环结束")
}
}
结果如下:
break
fun test() {
val indexes = arrayOf(1, 2, 3, 4, 5, 6, 7)
kotlin.run{
indexes.forEach { i ->
if (i == 3) {
return@run // break
}
println("test: $i")
}
}
println("forEach循环结束")
}
fun test() {
val indexes = arrayOf(1, 2, 3, 4, 5, 6, 7)
kotlin.run kotlinBreak@{
indexes.forEach { i ->
if (i == 3) {
return@kotlinBreak // 返回到自定义的标签kotlinBreak,continue
}
println("test: $i")
}
}
println("forEach循环结束")
}
结果如下:
看到这里,若小伙伴们有疑惑,那你需要了解内联、lambda、非局部返回 与局部返回。