Size: a a a

Kotlin Community

2020 September 08

PE

Pavel Erokhin in Kotlin Community
саша сок #KotlinGang
если нужен Unit, то я всегда explictly указываю его (про сайд эффект), а проблема через = может быть, если длинное выражение какое-то, но не использовать декораторо-подобный синтаксис по мне глупо

в этом примере ещё ок, там действительно вкусовщина, и то, и то выглядит хорошо

но вот писать

fun function() {
   scope {

   }
}

вместо

fun function() = scope {

}

странно, потому что это выглядит красиво и убирает индент
Полностью согласен, но спорить я не хочу), в своих личных проектах могу разуглятся по форматированию)
источник

AM

Andrew Mikhaylov in Kotlin Community
саша сок #KotlinGang
если нужен Unit, то я всегда explictly указываю его (про сайд эффект), а проблема через = может быть, если длинное выражение какое-то, но не использовать декораторо-подобный синтаксис по мне глупо

в этом примере ещё ок, там действительно вкусовщина, и то, и то выглядит хорошо

но вот писать

fun function() {
   scope {

   }
}

вместо

fun function() = scope {

}

странно, потому что это выглядит красиво и убирает индент
Ну так
fun function(): Unit = scope { ... }
не работает, если скоуп возвращает отличное от юнита, приходится писать экстеншн и вешать его после закрывающей фигурной скобки.
источник

с#

саша сок #KotlinGang... in Kotlin Community
Pavel Erokhin
Не подскажите, знатоки, чем приоритетнее?
и такое я бы просто писал

fun effect(...)
   = ...

потому что в одну линию как-то неоч
источник

с#

саша сок #KotlinGang... in Kotlin Community
Andrew Mikhaylov
Ну так
fun function(): Unit = scope { ... }
не работает, если скоуп возвращает отличное от юнита, приходится писать экстеншн и вешать его после закрывающей фигурной скобки.
это понятно, у меня extension unit для Any? есть
источник

PE

Pavel Erokhin in Kotlin Community
саша сок #KotlinGang
и такое я бы просто писал

fun effect(...)
   = ...

потому что в одну линию как-то неоч
там символов под 40, не вижу смысла на новую строку переносить
источник

с#

саша сок #KotlinGang... in Kotlin Community
Andrew Mikhaylov
Ну так
fun function(): Unit = scope { ... }
не работает, если скоуп возвращает отличное от юнита, приходится писать экстеншн и вешать его после закрывающей фигурной скобки.
зато индента нет
источник

AM

Andrew Mikhaylov in Kotlin Community
саша сок #KotlinGang
зато индента нет
Ну да, я тоже к этому склоняюсь у себя обычно.
источник

BP

Bogdan Panchenko in Kotlin Community
Andrew Mikhaylov
То есть для инлайнов это не фурычит? Которые умеют и так, и так
Ну обычную лямбду можно передать в функцию которая ждёт саспенд лямбду. Но оборот нельзя.
Ну и саспенд дружит только с crossinline
источник

AH

Ayrat Hudaygulov in Kotlin Community
trashkalmar
То, что приоритетнее в вашей компании. Синтаксис с = имеет неочевидный сайд-эффект: функция начинает возвращать значение, если результат тела — не Unit. Это в теории может сломать ссылки на методы, не совпадающие по сигнатуре
это весьма очевидно как раз таки.
Это вот функции с {} имеют неявное поведение игнорировать возвращаемый результат и всё приводить к Unit
источник

AM

Andrew Mikhaylov in Kotlin Community
саша сок #KotlinGang
и такое я бы просто писал

fun effect(...)
   = ...

потому что в одну линию как-то неоч
По стайл-гайдам оператор обычно, ЕМНИП, на строке до переноса остаётся
источник

AM

Andrew Mikhaylov in Kotlin Community
Bogdan Panchenko
Ну обычную лямбду можно передать в функцию которая ждёт саспенд лямбду. Но оборот нельзя.
Ну и саспенд дружит только с crossinline
Наоборот понятно, что нельзя.
источник

BP

Bogdan Panchenko in Kotlin Community
Andrew Mikhaylov
Наоборот понятно, что нельзя.
Ну я на всякий)
источник

AM

Andrew Mikhaylov in Kotlin Community
Ayrat Hudaygulov
это весьма очевидно как раз таки.
Это вот функции с {} имеют неявное поведение игнорировать возвращаемый результат и всё приводить к Unit
Это очевидно до первого
= list.add(it)
, об который спотыкаешься.
источник

с#

саша сок #KotlinGang... in Kotlin Community
Andrew Mikhaylov
По стайл-гайдам оператор обычно, ЕМНИП, на строке до переноса остаётся
хм, хорошо, у меня просто обычно длинные методы после =
источник

t

trashkalmar in Kotlin Community
Ayrat Hudaygulov
это весьма очевидно как раз таки.
Это вот функции с {} имеют неявное поведение игнорировать возвращаемый результат и всё приводить к Unit
Очевидно, когда метод есть перед глазами. А когда в разных местах раскиданы ссылки на него, то натыкаешься на проблему, когда компиляция взрывается)
источник

AM

Andrew Mikhaylov in Kotlin Community
Ayrat Hudaygulov
это весьма очевидно как раз таки.
Это вот функции с {} имеют неявное поведение игнорировать возвращаемый результат и всё приводить к Unit
Ну то есть я не говорю, что это плохо, это хорошо, конечно. Просто отсутствие поменять это поведение из коробки иногда кусает за ляшку.
источник

с#

саша сок #KotlinGang... in Kotlin Community
Ayrat Hudaygulov
это весьма очевидно как раз таки.
Это вот функции с {} имеют неявное поведение игнорировать возвращаемый результат и всё приводить к Unit
ну так для этого пишут

fun <T> time(handler: () -> T): T {
   val startTime = time()
   val result = handler()
   println(time() - startTime)
   return result
}
источник

AH

Ayrat Hudaygulov in Kotlin Community
саша сок #KotlinGang
ну так для этого пишут

fun <T> time(handler: () -> T): T {
   val startTime = time()
   val result = handler()
   println(time() - startTime)
   return result
}
не, для этого просто пишут

fun <T> scope(handler: () -> T) = handler()
источник

PE

Pavel Erokhin in Kotlin Community
Ayrat Hudaygulov
не, для этого просто пишут

fun <T> scope(handler: () -> T) = handler()
прекрасно выглядит.
я за такой код стайл!
источник

с#

саша сок #KotlinGang... in Kotlin Community
Ayrat Hudaygulov
не, для этого просто пишут

fun <T> scope(handler: () -> T) = handler()
я сначала думал как заюзать результат, но не придумал, никто не будет просто писать функцию, которая вызывает хендлер
источник