Kotlin Academy · Урок

break, continue и возвраты с метками

Управляйте ходом цикла с помощью break и continue и выходите из вложенных циклов по меткам.

Урок 4 из 413 шагов

«break, continue и возвраты с метками» — бесплатный урок Kotlin Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Kotlin Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Kotlin Academy содержит 4 уроков всего.

Управление потоком цикла

Kotlin поддерживает break для выхода из цикла, continue для перехода к следующей итерации и метки для выхода из вложенных циклов.

Основы break

break немедленно завершает ближайший внешний цикл.

fun main() {
    for (i in 1..10) {
        if (i == 5) break
        print("$i ")
    }
    println() // 1 2 3 4
}

Основы continue

continue пропускает остаток текущей итерации и переходит к следующей.

fun main() {
    for (i in 1..10) {
        if (i % 2 == 0) continue
        print("$i ")
    }
    println() // 1 3 5 7 9
}

Помеченные циклы

Пометьте цикл с помощью label@ и обращайтесь к нему через break@label или continue@label, чтобы управлять внешними циклами из вложенных.

fun main() {
    outer@ for (i in 1..3) {
        for (j in 1..3) {
            if (i == 2 && j == 2) break@outer
            println("$i,$j")
        }
    }
}

continue с меткой

Используйте continue@outer, чтобы перейти к следующей итерации внешнего цикла.

fun main() {
    outer@ for (i in 1..3) {
        for (j in 1..3) {
            if (j == 2) continue@outer
            println("i=$i j=$j")
        }
    }
}

return@lambda

Внутри forEach и других встроенных функций обычный return завершает внешнюю функцию. Используйте return@forEach, чтобы завершить только лямбду.

fun main() {
    listOf(1, 2, 3, 4, 5).forEach {
        if (it == 3) return@forEach
        println(it)
    }
    println("Done")
}

Нелокальный return в лямбдах

Если лямбда встроенная, как в forEach, обычный return завершает всю внешнюю функцию — иногда это бывает неожиданно.

fun process() {
    listOf(1, 2, 3).forEach {
        if (it == 2) return // exits process()
        println(it)
    }
    println("never printed")
}
fun main() { process() }

Пользовательская метка лямбды

Можно явно пометить лямбду с помощью name@, чтобы понятнее указать цель возврата.

fun main() {
    listOf(1, 2, 3, 4).forEach loop@{
        if (it == 3) return@loop
        println(it)
    }
}

break в цикле while

break и continue работают одинаково в while и do-while.

fun main() {
    var i = 0
    while (true) {
        if (i >= 3) break
        println("i = $i")
        i++
    }
}

Объединение метки и continue

Метки и continue позволяют пропускать целые итерации вложенных алгоритмов без переменных-флагов.

fun main() {
    val grid = listOf(listOf(1,2,0), listOf(3,4,5), listOf(0,6,7))
    rows@ for (row in grid) {
        for (cell in row) {
            if (cell == 0) continue@rows
            print("$cell ")
        }
        println()
    }
}

Когда не следует использовать метки

Метки усложняют код. Если Вы часто к ним обращаетесь, подумайте о выделении внутреннего цикла в отдельную функцию с обычным return.

fun firstMatch(grid: List<List<Int>>, target: Int): Pair<Int,Int>? {
    for (r in grid.indices) for (c in grid[r].indices) {
        if (grid[r][c] == target) return r to c
    }
    return null
}
fun main() {
    val g = listOf(listOf(1,2),listOf(3,4))
    println(firstMatch(g, 3))
}

Быстрая проверка

Как в Kotlin выйти из внешнего цикла, находясь внутри внутреннего?

Итоги

break завершает ближайший внешний цикл, а continue переходит к следующей итерации. Для управления вложенными циклами используйте label@ вместе с break@label или continue@label. В лямбдах предпочитайте return@forEach обычному return, чтобы избежать нелокального выхода.

Можно начать бесплатно

Изучай Kotlin с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
51
Уроки
203

Часто задаваемые вопросы

Урок «break, continue и возвраты с метками» бесплатный?

Да — полный текст урока «break, continue и возвраты с метками» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Kotlin Academy, подпишись на CoddyKit PRO. Курс Kotlin Academy содержит 4 уроков всего.

Чему я научусь в уроке «break, continue и возвраты с метками»?

Управляйте ходом цикла с помощью break и continue и выходите из вложенных циклов по меткам. Ты практикуешь Kotlin Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Kotlin Academy?

Предыдущий опыт не требуется. Kotlin Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «break, continue и возвраты с метками»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Kotlin Academy?

Да. Каждый урок Kotlin Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Цикл for по диапазонам и коллекциям
  2. while и do-while: когда что использовать
  3. forEach, repeat и forEachIndexed
  4. break, continue и возвраты с метками
← Назад к Kotlin Academy