Что выведет код Middle Лямбды, inline и reified обновлено

Метки return в лямбдах

Вопрос

Что выведет код? По строке на каждый вывод.

fun main() {
    listOf(1, 2, 3, 4).forEach {
        if (it % 2 == 0) return@forEach
        print("$it ")
    }
    println()
    run loop@{
        listOf(1, 2, 3, 4).forEach {
            if (it == 3) return@loop
            print("$it ")
        }
    }
    println("done")
}

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: 1 3 , 1 2 done. return@forEach выходит только из текущего вызова лямбды, как continue: чётные пропущены.

Что выведет

1 3 
1 2 done

Разбор

return@forEach выходит только из текущего вызова лямбды, как continue: чётные пропущены. Чтобы прервать весь forEach, его оборачивают в run с меткой и делают return@loop, это аналог break. После выхода из run выполнение продолжается, поэтому печатается done.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.