Size: a a a

Kotlin Community

2020 June 17

AH

Ayrat Hudaygulov in Kotlin Community
Товарищи, как сделать DSL для иммутабельного билдера в котлине?
Все примеры в интернете мутируют некий стейт в скоупе:
scoped { //создаём объект билдера
 step1 // мутируем его
 step2 // мутируем его
} // возвращаем мутированный много раз объект

а если надо дсл где шаги берут стейт предыдущей операции и создают новый результат? (типы могут отличаться)

sc
oped { //предположим здесь Unit
 step1 //берём Unit с прошлого этапа и возвращаем Int
 step2 // берём Int с прошлого этапа и возвращаем String
} // возвращаем String
Я
понимаю что с выводом типов беда и там будет какой-то Any, но мне хотя бы направление движения понять
источник

QH

Quantum Harmonizer in Kotlin Community
Ayrat Hudaygulov
Товарищи, как сделать DSL для иммутабельного билдера в котлине?
Все примеры в интернете мутируют некий стейт в скоупе:
scoped { //создаём объект билдера
 step1 // мутируем его
 step2 // мутируем его
} // возвращаем мутированный много раз объект

а если надо дсл где шаги берут стейт предыдущей операции и создают новый результат? (типы могут отличаться)

sc
oped { //предположим здесь Unit
 step1 //берём Unit с прошлого этапа и возвращаем Int
 step2 // берём Int с прошлого этапа и возвращаем String
} // возвращаем String
Я
понимаю что с выводом типов беда и там будет какой-то Any, но мне хотя бы направление движения понять
Все эти scoped-штуки — аналог джавового билдера, ищменяемого по своей сути.
Неизменяемо можно сделать безо всякого билдера, даже именовнные параметры вот есть.
источник

QH

Quantum Harmonizer in Kotlin Community
Вообще, эти type-safe builders имеют смысл, когда
* оборачивают существующий мутабельный API, исправить который не представляется возможным (Anko, Splitties),
* не собирают граф объектов, а мутируют его (Compose) или стримят данные (kotlinx.html),
* позволяют добавлять много однотипных элементов, заменяя (недостаточно гибкий) vararg (ktor? хз).
источник

КР

Кирилл Романенко... in Kotlin Community
Ayrat Hudaygulov
Товарищи, как сделать DSL для иммутабельного билдера в котлине?
Все примеры в интернете мутируют некий стейт в скоупе:
scoped { //создаём объект билдера
 step1 // мутируем его
 step2 // мутируем его
} // возвращаем мутированный много раз объект

а если надо дсл где шаги берут стейт предыдущей операции и создают новый результат? (типы могут отличаться)

sc
oped { //предположим здесь Unit
 step1 //берём Unit с прошлого этапа и возвращаем Int
 step2 // берём Int с прошлого этапа и возвращаем String
} // возвращаем String
Я
понимаю что с выводом типов беда и там будет какой-то Any, но мне хотя бы направление движения понять
scoped {
   this@scoped
       .step1()
       .step2()
}
источник

U

Unknow in Kotlin Community
hi
can someone give me sample of creating notification on android 7
источник

AH

Ayrat Hudaygulov in Kotlin Community
Quantum Harmonizer
Вообще, эти type-safe builders имеют смысл, когда
* оборачивают существующий мутабельный API, исправить который не представляется возможным (Anko, Splitties),
* не собирают граф объектов, а мутируют его (Compose) или стримят данные (kotlinx.html),
* позволяют добавлять много однотипных элементов, заменяя (недостаточно гибкий) vararg (ktor? хз).
у меня есть некрасивая вложенность вида
abc
 .flatMap { r1 ->
   r1
     .flatMap { r2 ->
       r2
         .flatMap { …


очень бы хотелось эту пирамиду смерти сплющить до
ab
c {
 flatMap … // берём предыдуший стейт и мапим
 flatMap … // берём предыдущий стейт и мапим
 flatMap … // берём предыдущий стейт и мапим
}

аналог do нотации хаскеля, for из Скалы или CE из F#
источник

AM

Andrew Mikhaylov in Kotlin Community
Unknow
hi
can someone give me sample of creating notification on android 7
Sorry, Android-related questions unrelated to Kotlin are off-topic here.
источник

QH

Quantum Harmonizer in Kotlin Community
Unknow
hi
can someone give me sample of creating notification on android 7
You can find it on the internet. If something goes wrong, you can ask in Android chat at thedevs.network
источник

AM

Andrew Mikhaylov in Kotlin Community
@commandertvis убрал, потому что там точно так же несвязанные с котлином вопросы оффтоп :)
источник

КР

Кирилл Романенко... in Kotlin Community
Ayrat Hudaygulov
у меня есть некрасивая вложенность вида
abc
 .flatMap { r1 ->
   r1
     .flatMap { r2 ->
       r2
         .flatMap { …


очень бы хотелось эту пирамиду смерти сплющить до
ab
c {
 flatMap … // берём предыдуший стейт и мапим
 flatMap … // берём предыдущий стейт и мапим
 flatMap … // берём предыдущий стейт и мапим
}

аналог do нотации хаскеля, for из Скалы или CE из F#
В таком виде точно не получится.
источник

AH

Ayrat Hudaygulov in Kotlin Community
Кирилл Романенко
В таком виде точно не получится.
есть какие-то советы кроме “не пиши так” ? 🙂
источник

AM

Andrew Mikhaylov in Kotlin Community
Кирилл Романенко
В таком виде точно не получится.
Ну чё прям не получится, в эрроу-то ду-нотацию сделали.
источник

QH

Quantum Harmonizer in Kotlin Community
Ayrat Hudaygulov
у меня есть некрасивая вложенность вида
abc
 .flatMap { r1 ->
   r1
     .flatMap { r2 ->
       r2
         .flatMap { …


очень бы хотелось эту пирамиду смерти сплющить до
ab
c {
 flatMap … // берём предыдуший стейт и мапим
 flatMap … // берём предыдущий стейт и мапим
 flatMap … // берём предыдущий стейт и мапим
}

аналог do нотации хаскеля, for из Скалы или CE из F#
а зачем такое надо? Как я понимаю, в данных тоже есть вложенность?..
источник

КР

Кирилл Романенко... in Kotlin Community
Ayrat Hudaygulov
есть какие-то советы кроме “не пиши так” ? 🙂
Разбей на подфункции, каждая из которых будет содержать парочку флатмапов.
источник

КР

Кирилл Романенко... in Kotlin Community
Andrew Mikhaylov
Ну чё прям не получится, в эрроу-то ду-нотацию сделали.
Так он хочет it из flatMap в следующей строчке превратить в this, это в целом невозможно.
источник

AH

Ayrat Hudaygulov in Kotlin Community
Кирилл Романенко
Разбей на подфункции, каждая из которых будет содержать парочку флатмапов.
ну да, это рассматриваемый вариант. просто вместо 5ти флатмапов условно легко обозреваемых (если забыть про всё увеличивающуюся идентацию) будет 2 функции попроще, но разом объять 5 шагов не получится. Не страшно, но допустим
источник

AH

Ayrat Hudaygulov in Kotlin Community
Andrew Mikhaylov
Ну чё прям не получится, в эрроу-то ду-нотацию сделали.
о, я щас посмотрел, очень похоже на то что надо

listOf(john, jane, jack).query {
       selectAll() where { age > 30 } groupBy { age }
   }.value()


надеюсь это бьётся по строкам нормально...
источник

QH

Quantum Harmonizer in Kotlin Community
SQL ❤️
источник

AH

Ayrat Hudaygulov in Kotlin Community
ну вот же, сделано
IO.fx {
 val (a) = IO.invoke { 1 }
 a + 1
}.fix().unsafeRunSync()
// 2


всё, осталось только посмотреть сорцы и передрать)
источник

AH

Ayrat Hudaygulov in Kotlin Community
источник