break, continue и возвраты с метками
Управляйте ходом цикла с помощью break и continue и выходите из вложенных циклов по меткам.
«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 — локальная установка не требуется.
Все уроки этого курса
- Цикл for по диапазонам и коллекциям
- while и do-while: когда что использовать
- forEach, repeat и forEachIndexed
- break, continue и возвраты с метками