Size: a a a

Kotlin Community

2020 October 14

AN

Alexander Nozik in Kotlin Community
саша сок #KotlinGang
а ведь можно было завезти декораторы как делегаты

fun fibonacci(at: Int) by memoized {
   
}
Такое уже есть
источник

IP

Iaroslav Postovalov in Kotlin Community
когда я слушал про val classes, у меня было ощущение, что я видел что-то подобное. вот же оно https://projectlombok.org/features/With
источник

с#

саша сок #KotlinGang... in Kotlin Community
Alexander Nozik
Такое уже есть
стоп, что я пропустил
источник

AN

Alexander Nozik in Kotlin Community
саша сок #KotlinGang
стоп, что я пропустил
Ну почти, функцию нельзя так делегироват, а пропертю можно.
источник

с#

саша сок #KotlinGang... in Kotlin Community
Alexander Levin
Ну последнее спорно, в питоне и js/ts декораторы ровно так и выглядят, насколько я помню

Но хотя идейно да, получается, что один и тот же синтаксис будет для трёх довольно разных вещей:
1. Аннотации
2. Требования контекста какого-то класса ( @with<View> )
3. Собственно декорирование функции ( @withTransaction )
да, но питон и js не строготипизированные и там к неявности типов мягче относятся
источник

AL

Alexander Levin in Kotlin Community
саша сок #KotlinGang
да, но питон и js не строготипизированные и там к неявности типов мягче относятся
Ну в ts например строго типизированные декораторы, не вижу повода не сравнивать с ним.
источник

с#

саша сок #KotlinGang... in Kotlin Community
Alexander Nozik
Ну почти, функцию нельзя так делегироват, а пропертю можно.
так а прикол в том, что я смогу внутри делегата функции получить её имя и параметры
источник

AN

Alexander Nozik in Kotlin Community
саша сок #KotlinGang
а ведь можно было завезти декораторы как делегаты

fun fibonacci(at: Int) by memoized {
   
}
В принципе я согласен, что в смысле сигнатуры это более прозрачно.
источник

AL

Alexander Levin in Kotlin Community
саша сок #KotlinGang
а ведь можно было завезти декораторы как делегаты

fun fibonacci(at: Int) by memoized {
   
}
А если несколько декораторов, то через запятую?
источник

с#

саша сок #KotlinGang... in Kotlin Community
Alexander Nozik
В принципе я согласен, что в смысле сигнатуры это более прозрачно.
только вот тогда они окажутся не нужны в большинстве показанных случаев. ибо with<A, B> можно и просто

fun fibonacci() = with<A, B> {

}

и я в принципе до показа декораторов называл такое "котлиновскими декораторами"
источник

с#

саша сок #KotlinGang... in Kotlin Community
Alexander Levin
А если несколько декораторов, то через запятую?
я не слышал о том, что можно несколько. но почему бы нет
источник

AN

Alexander Nozik in Kotlin Community
саша сок #KotlinGang
только вот тогда они окажутся не нужны в большинстве показанных случаев. ибо with<A, B> можно и просто

fun fibonacci() = with<A, B> {

}

и я в принципе до показа декораторов называл такое "котлиновскими декораторами"
Нет, это уже не работает. Мультиресиверы должны быть частью сигнатуры функции, их не сделаешь через делегацию
источник

AL

Alexander Levin in Kotlin Community
саша сок #KotlinGang
я не слышал о том, что можно несколько. но почему бы нет
Ну вся проблема именно с частью про декораторы заключается примерно в том, что в одну штуку завернуть не проблема:

fun foo() = transactional { ... }
А во много уже начинает выглядеть глупо
fun foo() = transactional { logged { measured { ... } } }
источник

с#

саша сок #KotlinGang... in Kotlin Community
Alexander Levin
А если несколько декораторов, то через запятую?
нене, как через запятую, если

decerator {

}

это high-order функция, которая возвращает какой-нибудь объект с operator методом decorate (по принципу делегатов)
источник

AN

Alexander Nozik in Kotlin Community
Alexander Levin
Ну вся проблема именно с частью про декораторы заключается примерно в том, что в одну штуку завернуть не проблема:

fun foo() = transactional { ... }
А во много уже начинает выглядеть глупо
fun foo() = transactional { logged { measured { ... } } }
Предложение @relizarov выглядит классно пока эта штука не меняет сигнатуру функции. Но вот случай, когда меняет мне кажется не таким прозрачным
источник

AM

Andrew Mikhaylov in Kotlin Community
саша сок #KotlinGang
так а прикол в том, что я смогу внутри делегата функции получить её имя и параметры
Пока вроде такого не обещали :)
источник

с#

саша сок #KotlinGang... in Kotlin Community
Alexander Levin
Ну вся проблема именно с частью про декораторы заключается примерно в том, что в одну штуку завернуть не проблема:

fun foo() = transactional { ... }
А во много уже начинает выглядеть глупо
fun foo() = transactional { logged { measured { ... } } }
тогда да, они нужны. но тут уже очень большая неявность типов ибо даже от смены порядка может поменяться тип
источник

AL

Alexander Levin in Kotlin Community
Alexander Nozik
Предложение @relizarov выглядит классно пока эта штука не меняет сигнатуру функции. Но вот случай, когда меняет мне кажется не таким прозрачным
Ну, собственно примерно поэтому я бы отделял просто декораторы от требования контекста, несмотря на то, что им выдали в слайдах один синтаксис, они вообще не выглядят как из одного юзкейса.
источник

AN

Alexander Nozik in Kotlin Community
Andrew Mikhaylov
Пока вроде такого не обещали :)
Не обещали, но это логично. Все же в компайл-тайме
источник

с#

саша сок #KotlinGang... in Kotlin Community
Andrew Mikhaylov
Пока вроде такого не обещали :)
ну я вижу смысл у декораторов здорового человека именно такой.

просто то, что сейчас делают - сахар, чтобы убрать вложенность

а реальные декораторы - вот пример https://t.me/pofftop/241712
источник