Что выведет код 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 ошибок.