В Котлине, если ты хочешь сделать функцию с локальными переменными, придётся возвращать значение при помощи return.
fun bugaga() {
val z = 5
return z
}
Я это конечно объехал, но код на мой вкус красивее не стал =):
fun bugaga() = when(true) { else -> {
val z = 5
z
}}
Ещё можно написать, как иногда пишут на JS, и надеяться, что заинлайнит лямбду:
fun bugaga() = ({
val z = 5
z
}())
Для этого даже есть
специальная затычка run, чтобы выглядело немного пристойнее (скобок меньше):
fun bugaga() = run {
val z = 5
z
}
Из сказанного выше уже становится понятно, что Котлин очень хочет из любых фигурных скобок сделать лямбду. Оно на самом деле так и есть. Если в середине тела функции попытаться сделать использовать фигурные скобки, как выражение, то тоже получится не то, что считается в них, а функция, которая считает то, что в них.
Наконец, можно просто присвоить лямбду в переменную/константу, написав:
val bugaga = {
val z = 5
return z
}
В какую жесть это выльется, см. в комментах.
Но почему хотя бы для тел функций не сделать исключение? if, в конце концов, в Котлине нормальный же.
Или я чего-то очень-очень не догнал (надеюсь), причём не
я один, а ещё как минимум
один мужик, или Котлин пилили фанаты goto...