Size: a a a

Kotlin Community

2020 November 06

АЕ

Алексей Ершов... in Kotlin Community
Vitaly Peryatin
Можно ссылочку? Этот кейс конкретно для Kotlinx Serialization?
https://github.com/Kotlin/kotlinx.serialization/blob/master/docs/json.md#array-wrapping
доку рекомендую прочитать всю, очень полезная
источник

VP

Vitaly Peryatin in Kotlin Community
Спасибо! Выручил)
источник

VP

Vitaly Peryatin in Kotlin Community
Доку действительно стоит прочитать полностью
источник

SR

Sergey Rostov in Kotlin Community
Alexander Nozik
Ну сама идея динамических параметров мне понятна. Сам так делаю в plotly/visionforge. Вопрос в синтаксисе.
А, тогда я не понял вопроса. А какой синтаксис вы бы сделали?
источник

BV

Boris Vanin in Kotlin Community
Sergey Rostov
А, тогда я не понял вопроса. А какой синтаксис вы бы сделали?
С рессиверами, наверное, особенно если бы была мульти-версия
источник

AN

Alexander Nozik in Kotlin Community
Sergey Rostov
А, тогда я не понял вопроса. А какой синтаксис вы бы сделали?
Я не уверен, что можно сделать лучше, но просто то, что есть вызывает некоторый визуальный дискомфорт. Мне нравится как сделано в tornado/kotlinx-html, когда параметры можно задавать внутри специального блока в лямбде, но я понимаю, что в компоузе это не будет работать по технической причине. Еще два варианта, которые приходит в голову это
vararg modifiers: Modifier
или
modifier: Modifier.()->Unit
источник

AN

Alexander Nozik in Kotlin Community
Boris Vanin
С рессиверами, наверное, особенно если бы была мульти-версия
С мульиресиверами вероятно не получится, потому что композабл лямбда обрабатывается компилятором, там по-моему нельзя прокинуть параметры изнутри лямбды в наружу... хотя...
источник

BV

Boris Vanin in Kotlin Community
Alexander Nozik
С мульиресиверами вероятно не получится, потому что композабл лямбда обрабатывается компилятором, там по-моему нельзя прокинуть параметры изнутри лямбды в наружу... хотя...
🤔 наверное нельзя
источник

AN

Alexander Nozik in Kotlin Community
Boris Vanin
🤔 наверное нельзя
Ну в общем, можно придумать, как это будет с точки зрения АПИ, но вот на компиляторном уровне могут быть проблемы. Все параметры надо знать до вызова лямбды.
источник

BV

Boris Vanin in Kotlin Community
Всегда можно определить контекст с параметрами рессивером 🤷‍♂
источник

BV

Boris Vanin in Kotlin Community
Если их можно определять больше одного
источник

AN

Alexander Nozik in Kotlin Community
Boris Vanin
Всегда можно определить контекст с параметрами рессивером 🤷‍♂
Ну да, я тоже про это думал, но если параметры должны быть известны до вызова лямбды, то не пройдет
источник

BV

Boris Vanin in Kotlin Community
Но нельзя 🙈
источник

BV

Boris Vanin in Kotlin Community
Alexander Nozik
Ну да, я тоже про это думал, но если параметры должны быть известны до вызова лямбды, то не пройдет
Подойдёт, можно же типизирлванную мапу например использовать
источник

AN

Alexander Nozik in Kotlin Community
В принципе у нынешнего дизайна компоуза есть жирный плюс в том, что если не нравится, то поверх него можно сделать все варианты, которые мы тут обсуждаем
источник

OY

Oleg Yukhnevich in Kotlin Community
Alexander Nozik
Я не уверен, что можно сделать лучше, но просто то, что есть вызывает некоторый визуальный дискомфорт. Мне нравится как сделано в tornado/kotlinx-html, когда параметры можно задавать внутри специального блока в лямбде, но я понимаю, что в компоузе это не будет работать по технической причине. Еще два варианта, которые приходит в голову это
vararg modifiers: Modifier
или
modifier: Modifier.()->Unit
на счёт:
vararg modifiers: Modifier
или
modifier: Modifier.()->Unit
с vararg - неудобно композировать модифаеры
с лямбдой синтаксис чаще всего будет содержать Component(modifier = { ... }) { }
что выглядит не лучше чем то, что сейчас, и композиция тоже слегка страдает
источник

AN

Alexander Nozik in Kotlin Community
Oleg Yukhnevich
на счёт:
vararg modifiers: Modifier
или
modifier: Modifier.()->Unit
с vararg - неудобно композировать модифаеры
с лямбдой синтаксис чаще всего будет содержать Component(modifier = { ... }) { }
что выглядит не лучше чем то, что сейчас, и композиция тоже слегка страдает
А что такое композирование модификаторов? Они же просто фолдятся
источник

AN

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

OY

Oleg Yukhnevich in Kotlin Community
Alexander Nozik
А что такое композирование модификаторов? Они же просто фолдятся
вот гляньте сюда https://developer.android.com/reference/kotlin/androidx/compose/ui/Modifier
там есть например варианты, когда приходит modifier и потом внизу добавляется новый
и то есть с vararg это получается надо будет все ф-ии иметь с vararg и + передача этих модифаеров будет не очень
с лфмбдой тоже самое
источник

OY

Oleg Yukhnevich in Kotlin Community
вставлю лучше код:
@Composable
fun PaddedColumn(modifier: Modifier = Modifier) {
   Column(modifier.padding(10.dp)) {
       // ...
   }
}
источник