Size: a a a

Kotlin Community

2020 October 14

AN

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

AM

Andrew Mikhaylov in Kotlin Community
Alexander Nozik
Не обещали, но это логично. Все же в компайл-тайме
Если вдруг там будет интроспекция параметров, а частный случай with и сигнатуру менять может, может оказаться, что это всё-таки одна фича, более масштабная, а не две визуально похожие.
источник

с#

саша сок #KotlinGang... in Kotlin Community
и это отлично в делегаты вписывается по-моему. но это не решит вопрос вложенности тогда
источник

AM

Andrew Mikhaylov in Kotlin Community
Да я понимаю, я видел, как в том же Vue.js с тайпскриптом декораторы применяются.
источник

AN

Alexander Nozik in Kotlin Community
Andrew Mikhaylov
Если вдруг там будет интроспекция параметров, а частный случай with и сигнатуру менять может, может оказаться, что это всё-таки одна фича, более масштабная, а не две визуально похожие.
Ну конкретно декоратор, который не меняет сигнатуру, но при этом имеет доступ к сингатуре функций - это абсолютно нормально и вроде не сложно.
источник

AN

Alexander Nozik in Kotlin Community
Но это все опять же круто до тех пор, пока он не меняет сигнатуру функции
источник

AM

Andrew Mikhaylov in Kotlin Community
На самом деле Александр правильно про тайпскрипт напомнил.
источник

AN

Alexander Nozik in Kotlin Community
Andrew Mikhaylov
На самом деле Александр правильно про тайпскрипт напомнил.
А есть пример где он сигнатуру меняет?
источник

AM

Andrew Mikhaylov in Kotlin Community
Alexander Nozik
А есть пример где он сигнатуру меняет?
Вышеупомянутый вью.жс. Там декораторами классы компонентов помечаются, а декораторы перелопачивают его проперти, добавляя им реактивность. Деталей не помню, да и не с компа сейчас.

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

с#

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

с#

саша сок #KotlinGang... in Kotlin Community
просто вопрос, нельзя ли требовать возвращать то же, что функция ?
источник

с#

саша сок #KotlinGang... in Kotlin Community
@noraltavir

class Decorator {
    inline operator fun <T> decorate(func: KDecoratable<T>): T {
        val result = func()
        val params = func.params.joinToString(", ") { it.value }
        println("${func.name}($params): $result")
        return result
    }
}


что-то такое вообще не варик делать?

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

AL

Alexander Levin in Kotlin Community
саша сок #KotlinGang
@noraltavir

class Decorator {
    inline operator fun <T> decorate(func: KDecoratable<T>): T {
        val result = func()
        val params = func.params.joinToString(", ") { it.value }
        println("${func.name}($params): $result")
        return result
    }
}


что-то такое вообще не варик делать?

и если их несколько, то можно через запятую и т.к. там инлайн функции, то всё норм можно сделать. но это если запретить смену сигнатуры
И у нас каждый параметр со стёртым типом в теории в таком случае.
источник

с#

саша сок #KotlinGang... in Kotlin Community
Alexander Levin
И у нас каждый параметр со стёртым типом в теории в таком случае.
с сырым типом - это как ?
источник

с#

саша сок #KotlinGang... in Kotlin Community
"Any?" ?
источник

с#

саша сок #KotlinGang... in Kotlin Community
ну так и должно быть по-моему
источник

AL

Alexander Levin in Kotlin Community
Ну, в Питоне или просто в js нас не особо это волнует, но условно говоря да, тут надо запариться, чтобы все типы параметров были известны в полном виде.
источник

AH

Ayrat Hudaygulov in Kotlin Community
Alexander Levin
И у нас каждый параметр со стёртым типом в теории в таком случае.
можно ж reified T сделать, не?
источник

с#

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

с#

саша сок #KotlinGang... in Kotlin Community
там тип тоже неизвестен, точнее там как раз Type известен, а класс нет
источник