Kotlin 标签与goto

本文探讨了Kotlin语言中如何使用标签进行类似于goto的跳转操作,包括`break`、`continue`和带标签的`return`。尽管这些功能在某些场景下提供了便利,但与C语言中的`goto`相比,Kotlin的标签使用更加受限,主要适用于多层循环的控制。作者建议在需要复杂跳转逻辑时,考虑使用`when`表达式或其他条件判断。
摘要由CSDN通过智能技术生成

今天写代码的时候突发奇想,想着是否在kotlin中有着可以想goto一样的用法的存在。

标签

首先想到的是kotlin的标签:label

class KotlinLabelCode {

    /**
     * 一般的方法
     */
    fun FunNormal() {
        println("FunNormal start")
        println("here0")
        for (i in 0..3) {
            for (j in 0..3) {

            }
            println("$i")
        }
        println("here1")
        println("FunNormal end")
    }

    /**
     * break
     * 个人理解的话这种常用的场景是在多层循环嵌套的情况下。如果需要在多条件的情况下比较推荐使用when。
     */
    fun FunBreak() {
        println("FunBreak start")
        println("here0")
        loop@for (i in 0..3) {
            for (j in 0..3) {
                if (j == 2) break@loop   // 直接跳出两层循环体
                println("here1 $i $j")
            }
            println("here2 $i")
        }
        println("here3")
        println("FunBreak end")
    }

    /**
     * 标签的cpmtinue使用
     * continue 继续标签指定的循环的下一次迭代。也就是直接进行第一重循环的下一次迭代了。
     */
    fun FunContinue() {
        println("FunContinue start")
        println("here0")
        loop@for (i in 0..3) {
            for (j in 0..3) {
                if (j == 2) continue@loop   // 直接跳出两层循环体
                println("here1 $i $j")
            }
            println("here2 $i")
        }
        println("here3")
        println("FunContinue end")
    }

    /**
     * 标签的cpmtinue使用
     * 这个 return 表达式从最直接包围它的函数即 foo 中返回。
     * (注意,这种非局部的返回只支持传给内联函数的 lambda 表达式。)
     * 如果我们需要从 lambda 表达式中返回,我们必须给它加标签并用以限制 return。
     */
    fun FunReturn() {
        println("FunReturn end")
        var ints =  0..10
        println("here0")
        ints.forEach {
            if (it == 3) return@forEach     //这里使用了隐藏式的标签,只会从 lambda 表达式中返回.当前就相当于使用了continue
            println("here1 $it")
        }
        println("here2")
        println("FunReturn end")
    }



}

fun main(args:Array<String>){
    var code = KotlinLabelCode();
    code.FunNormal()
    code.FunBreak()
    code.FunContinue()
    code.FunReturn()
}

总结:kotlin中的标签和goto的差别还是很大的。虽然都是表示跳转,但是kotlin的的标签的限制更多,且只能在特定的场景中使用。如果需要使用到多种条件的场景下的话可以使用when等条件判断来使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值