Котлин и императивные блоки

Nov 13, 2015 18:00

В Котлине, если ты хочешь сделать функцию с локальными переменными, придётся возвращать значение при помощи 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...

информатика, чтобы написали, софт, анализ

Previous post Next post
Up