Kotlin-07.返回和跳转(return/break/continue)

本文详细介绍了Kotlin中的返回和跳转机制,包括return、break和continue的基本使用方法,以及如何通过标签@实现更复杂的跳转逻辑。此外,还讲解了在局部函数和lambda表达式中使用return@标签的技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

官方文档: http://kotlinlang.org/docs/reference/returns.html

1.返回和跳转

Kotlin 和java一样,有三种结构化跳转表达式:
    return   从包围它的函数或匿名函数返回
    break    终止循环
    continue 跳出本次循环,继续下一次循环

和Java不同的是,这些表达式都可作为更大表达式的一部分:
        val s = person.name ?: return

2.break和continue @标签

和Java不同的是,在 Kotlin 中任何表达式都可以用 标签@ 来标记:
    loop@ for (i in 1..100) {
        for (j in 1..100) {
            if (……) break@loop // 终止loop标记的循环
            if (……) continue@loop // 跳出loop标记的循环,继续下一次loop标记的循环
        }
    }

3.return @标签

Kotlin 有局部函数,因此Kotlin函数可被嵌套

1.从外层函数返回:
    fun foo() {
        ints.forEach {
            if (it == 0) return // 默认从foo(){}返回
            print(it)
        }
    }

2.用显式标签从lambda表达式中返回:
    fun foo() {
        ints.forEach lit@ {
            if (it == 0) return@lit // 标记从forEach{}返回
            print(it)
        }
    }

3.用隐式标签(与接收lambda的函数同名)从lambda表达式中返回:
    fun foo() {
        ints.forEach {
            if (it == 0) return@forEach // 隐式标签forEach,从forEach{}返回
            print(it)
        }
    }

4.用匿名函数替代lambda表达式:
    fun foo() {
        ints.forEach(fun(value: Int) {
            if (value == 0) return // 从该匿名函数fun返回
            print(value)
        })
    }

当return返回值时:
    return@a 1 // 从@a标记的函数返回1,不是返回标记的表达式(@a 1)”。

简书: http://www.jianshu.com/p/e866093868b4
优快云博客: http://blog.youkuaiyun.com/qq_32115439/article/details/73381825
GitHub博客: http://lioil.win/2017/06/17/Kotlin-returns.html
Coding博客: http://c.lioil.win/2017/06/17/Kotlin-returns.html

<think>嗯,用户现在问的是Kotlinreturncontinuebreak的区别。这三个关键字在控制流程中确实容易让人混淆,特别是对于刚开始学习编程的人来说。我需要先回忆一下它们各自的作用,然后思考如何清晰地解释它们的区别。 首先,return是用于函数的返回值,它会结束当前函数的执行,并返回一个值。如果函数没有返回值,也就是返回类型是Unit,可以省略return或者使用return直接退出函数。比如在循环中,如果遇到某个条件,使用return会直接跳出整个函数,而不仅仅是循环。 然后是continue,这个关键字主要用于循环结构中,比如for或者while循环。当在循环体内遇到continue时,它会跳过当前迭代的剩余代码,直接进入下一次循环。比如在一个遍历数字1到10的循环中,如果遇到偶数就continue,那么遇到偶数时不会执行后面的代码,直接进入下一个数字的处理。 接下来是break,同样用于循环结构。当执行break时,会立即终止整个循环,跳出循环体,继续执行循环之后的代码。例如,在一个查找元素的循环中,一旦找到目标元素,就可以用break提前结束循环,不需要继续遍历剩下的元素。 用户可能是在写循环或者函数时遇到了问题,分不清这三个关键字应该在什么情况下使用。需要举例说明每个关键字的具体应用场景,以及它们对程序流程的不同影响。 可能需要注意的地方是,Kotlin中的breakcontinue在嵌套循环中的行为。默认情况下,它们只会影响最内层的循环,但如果有标签(label),可以控制跳转到外层循环。不过用户的问题可能暂时不需要涉及标签,可以先解释基本用法,如果有需要再深入。 另外,用户可能对标签的使用不太熟悉,但这个问题可能超出了当前的范围。不过为了全面性,可以稍微提一下标签的作用,但重点还是放在三个关键字的区别上。 需要确保例子简单易懂,比如使用数字遍历的例子,分别用三个关键字来展示不同的执行结果。同时,比较它们的作用范围,比如return影响整个函数,而continuebreak只影响循环。 可能用户之前看过类似的代码,但实际使用时混淆了这三个关键字的用法,导致程序逻辑错误。通过具体的代码示例,可以帮助用户更直观地理解它们的不同行为。 总结来说,回答需要分点解释每个关键字,给出示例代码,并比较它们之间的区别。同时,可以给出使用场景的建议,帮助用户在实际编程中选择合适的关键字。</think>让我们通过具体示例对比表格来理解这三个控制流关键字的区别: --- ### **1. `return`(函数返回)** $$ fun\ exampleReturn() { for\ (i\ in\ 1..3) { if\ (i == 2) return // 直接退出整个函数 println(i) } } $$ **执行结果**: ``` 1 ``` **特点**: - 立即**终止当前函数**的执行 - 可以携带返回值:`return 42` -lambda表达式中会退出外围函数(需注意作用域) --- ### **2. `continue`(跳过当前迭代)** $$ for\ (i\ in\ 1..5) { if\ (i % 2 == 0) continue // 跳过偶数的处理 println(i) } $$ **执行结果**: ``` 1 3 5 ``` **特点**: - 仅**跳过当前循环迭代** - 继续执行下一次循环 - 在嵌套循环中只影响当前层循环 --- ### **3. `break`(终止循环)** $$ var\ sum = 0 for\
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值