个人网站设计背景图,企业信息网站模板,如何把网站点击连接到百度商桥,国内知名网站文章目录 for循环中使用break、continueLabel标签forEach中如何退出循环资料 Kotlin 有三种结构化跳转表达式#xff1a;
return#xff1a;默认从最直接包围它的函数或者匿名函数返回。break#xff1a;终止最直接包围它的循环。continue#xff1a;继续下一次最直接包围… 文章目录 for循环中使用break、continueLabel标签forEach中如何退出循环资料 Kotlin 有三种结构化跳转表达式
return默认从最直接包围它的函数或者匿名函数返回。break终止最直接包围它的循环。continue继续下一次最直接包围它的循环。
for循环中使用break、continue
fun forControl() {for (i in 1..5) {if (i 3) break //1 这里分别使用break continue returnprintln(i: $i)}println(循环外继续执行)
}1处分别使用break、continue、return 替换执行结果如下
//break
i: 1
i: 2
循环外继续执行//continue
i: 1
i: 2
i: 4
i: 5
循环外继续执行//return
i: 1
i: 2嗯跟Java中的使用姿势是一样的继续往下看。
Label标签
在 Kotlin 中任何表达式都可以用标签label来标记。 标签的格式为标识符后跟 符号例如abc、loop都是有效的标签。 要为一个表达式加标签我们只要在其前加标签即可。示例
loop for (i in 1..5){//...}这里在嵌套for循环中使用Label可以控制break及continue的范围
fun forNestedControl() {loop for (i in 1..2) {println(i: $i)for (j in 1..5) {if (j 3) breakloop //break continueprintln(j: $j)}}
}执行结果
//break
i: 1
j: 1
j: 2
循环外继续执行//continue
i: 1
j: 1
j: 2i: 2
j: 1
j: 2
循环外继续执行注意不能在上述代码中使用returnloop因为目标标签表示的不是函数错误信息如下 Target label does not denote a function 结论标签限制的 break 跳转到刚好位于该标签指定的循环后面的执行点。 continue 继续标签指定的循环的下一次迭代。
forEach中如何退出循环
在forEach中并不能直接使用break、continue 可以看到直接报错了错误信息也很明确break 和 continue 只允许在循环中使用而这里是forEach的闭包所以并不能直接使用break 和 continue。那么如何在forEach中分别模拟出break、continue的效果呢通过Label即可实现如
fun forEachControl() {listOf(1, 2, 3, 4, 5).forEach forEach{if (it 3) returnforEachprintln(it:$it)}println(循环外继续执行)
}return 只会从 lambda 表达式中返回。通常情况下使用隐式标签更方便Label 标签与接受该 lambda 的函数同名即可使用隐式标签简化之后
fun forEachControl() {listOf(1, 2, 3, 4, 5).forEach{if (it 3) returnforEachprintln(it:$it)}println(循环外继续执行)
}代码执行结果
it:1
it:2
it:4
it:5
循环外继续执行可以看到returnforEach相当于表达式里面的continue了。嗯哼为什么不是break的效果呢明明已经returnforEach了呀其实这是Kotlin闭包带来的副作用看下forEach的源码
public inline fun T IterableT.forEach(action: (T) - Unit): Unit {//注意看下面这行代码的逻辑for (element in this) action(element)
}action闭包作为参数传入的所以在forEach中returnforEach只能停止当前闭包的逻辑后面的循环并不会受影响会继续后面的循环。那么如何在forEach中模拟break的效果呢只要把声明Label放到forEach外面即可以了
fun forEachControl() {run loop{listOf(1, 2, 3, 4, 5).forEach {if (it 3) returnloopprintln(it:$it)}println(循环外继续执行)}}执行结果
it:1
it:2资料
【1】Kotlin返回和跳转https://www.kotlincn.net/docs/reference/returns.html