Возврат из лямбды в Kotlin
В обычной лямбде return относится только
к самой лямбде. Если функцию с параметром-лямбдой
встраивают, тело блока оказывается в месте вызова,
и return внутри него выходит из той функции,
где блок написали.
Такой выход называют нелокальным возвратом. Ниже
после печати слова "start" выполнение
покидает main, и строка "end" не
печатается:
inline fun runBlock(block: () -> Unit) {
block()
}
fun main() {
runBlock {
println("start")
return
}
println("end")
}
Тот же выход годится, чтобы закончить поиск и сразу вернуть найденную строку из функции, которая вызвала встроенный блок:
inline fun runBlock(block: () -> Unit) {
block()
}
fun firstLog(lines: List<String>): String {
runBlock {
for (line in lines) {
if (line.startsWith("log")) {
return line
}
}
}
return "none"
}
fun main() {
val data = listOf("err:2", "log:1", "log:3")
println(firstLog(data))
}
Напишите функцию, которая ищет в списке чисел
первое значение больше заданного порога. При
находке сразу верните его, иначе верните
null. Проверьте на списке с элементами
2, 8, 5 и пороге 4.
Сделайте поиск подстроки в списке слов: функция
возвращает первое слово, которое содержит
фрагмент "api", или null, если
такого нет. Используйте перебор с лямбдой
внутри объявления.