ZetCode

Kotlin break 关键字

最后修改于 2025 年 4 月 19 日

Kotlin 中的 break 关键字用于提前终止循环执行。它提供了对循环流程的控制,允许在满足特定条件时提前退出。本教程深入探讨了 break 的用法。

基本定义

break 语句立即终止最近的封闭循环。Kotlin 还支持带标签的 break,可以终止特定的外部循环。 Break 通常与循环内的条件语句一起使用。

while 循环中的基本 break

此示例展示了使用 break 退出 while 循环的最简单方法,即当满足条件时。 当执行 break 时,循环立即终止。

BasicBreak.kt
package com.zetcode

fun main() {

    var i = 0
    
    while (true) {
        println(i)
        i++
        
        if (i > 5) {
            break
        }
    }
}

如果没有 break,循环将无限运行。 当 i 超过 5 时,break 终止循环。 这种模式在读取输入直到遇到哨兵值时很常见。

for 循环中的 break

break 语句在 for 循环中的工作方式类似。此示例在范围内搜索一个值,并在找到时中断。

ForBreak.kt
package com.zetcode

fun main() {

    val searchFor = 7
    
    for (i in 1..10) {
        println("Checking $i")
        
        if (i == searchFor) {
            println("Found $searchFor")
            break
        }
    }
}

循环检查数字 1 到 10。 当它找到目标数字 (7) 时,它会打印一条消息并使用 break 立即退出。 这可以防止在找到结果后进行不必要的迭代。

嵌套循环中的 break

在嵌套循环中,break 仅终止最内层的循环。 此示例演示了 break 如何影响嵌套循环结构。

NestedBreak.kt
package com.zetcode

fun main() {

    for (i in 1..3) {
        println("Outer loop: $i")
        
        for (j in 1..5) {
            println("  Inner loop: $j")
            
            if (j == 3) {
                break
            }
        }
    }
}

当 j 达到 3 时,内循环中断,但外循环照常继续。 每次外层迭代都会创建一个新的内循环,该循环独立中断。 这显示了 break 的范围限制。

带标签的 break

Kotlin 的带标签的 break 允许终止特定的外部循环。 标签是用标识符后跟 @ 创建的。 这对嵌套循环很有用。

LabeledBreak.kt
package com.zetcode

fun main() {

    outerLoop@ for (i in 1..3) {
        println("Outer loop: $i")
        
        for (j in 1..5) {
            println("  Inner loop: $j")
            
            if (j == 3) {
                break@outerLoop
            }
        }
    }
}

在这里,当 j 达到 3 时,带标签的 break 终止外循环。 如果没有标签,只有内循环会中断。 标签可以精确控制在嵌套结构中退出哪个循环。

do-while 循环中的 break

break 语句在 Kotlin 中所有循环类型中的工作方式都一致。 此示例显示了它在 do-while 循环结构中的使用。

DoWhileBreak.kt
package com.zetcode

fun main() {

    var sum = 0
    var num: Int
    
    do {
        print("Enter a number (0 to stop): ")
        num = readLine()!!.toInt()
        
        if (num == 0) {
            break
        }
        
        sum += num
    } while (true)
    
    println("Total sum: $sum")
}

此交互式示例对数字求和,直到用户输入 0。 当检测到 0 时,break 语句立即退出循环。 否则,while(true) 条件将创建一个无限循环。

与 when 表达式一起使用 break

break 语句可以在循环内的 when 表达式中使用。 这为多个条件提供了清晰的控制流程。

WhenBreak.kt
package com.zetcode

fun main() {

    for (i in 1..10) {
        when {
            i % 2 == 0 -> println("$i is even")
            i % 3 == 0 -> println("$i is divisible by 3")
            i > 7 -> break
            else -> println("$i is not special")
        }
    }
}

循环处理具有不同条件的数字。 当 i 超过 7 时,break 终止循环。 when 表达式干净地处理多个情况,而 break 提供了退出条件。

函数式构造中的 break

虽然 forEach 等函数式构造不直接支持 break,但我们可以使用带有标签的 run 块来模拟它。此示例演示了该模式。

FunctionalBreak.kt
package com.zetcode

fun main() {

    run loop@ {
        (1..10).forEach {
            println(it)
            
            if (it == 5) {
                return@loop
            }
        }
    }
}

带有标签的 run 块创建了我们可以从中返回的作用域。 当它达到 5 时,它会退出整个构造,模拟 break 行为。 这是对 break 在函数式构造中的限制的解决方法。

使用 break 的最佳实践

来源

Kotlin 返回和跳转文档

本教程深入介绍了 Kotlin 的 break 关键字,展示了它在各种循环结构中的使用。我们探讨了基本 break、带标签的 break 以及对函数式构造的解决方法。 适当地使用 break 可以在谨慎使用时使循环更高效、更具可读性。

作者

我叫 Jan Bodnar,是一位充满激情的程序员,拥有多年的编程经验。 我从 2007 年开始撰写编程文章。到目前为止,我写了 1400 多篇文章和 8 本电子书。 我拥有超过八年的编程教学经验。

列出 所有 Kotlin 教程