Size: a a a

Kotlin Community

2020 June 23

QH

Quantum Harmonizer in Kotlin Community
Кирилл Романенко
Я пользовался, отличная либа. Очень напоминает рум, но удобно то что на любой запрос тебе отдают query, который ты можешь интерпретировать как хочешь. Это очень удобно и гибко.
типобезопасно ли это «как хочешь»? :)
источник

КР

Кирилл Романенко... in Kotlin Community
Quantum Harmonizer
типобезопасно ли это «как хочешь»? :)
А причём тут типы?) Я говорю про Query<T>, у которого есть несколько основных методов: получить как one or null, получить как one, получить как list, и ещё вроде можно коллбек повесить. И можно даже самому прикрутить любой удобный реактивный инструмент для этого, а не ждать, пока тебе готовую обёртку дадут, как в руме.
источник

QH

Quantum Harmonizer in Kotlin Community
Кирилл Романенко
А причём тут типы?) Я говорю про Query<T>, у которого есть несколько основных методов: получить как one or null, получить как one, получить как list, и ещё вроде можно коллбек повесить. И можно даже самому прикрутить любой удобный реактивный инструмент для этого, а не ждать, пока тебе готовую обёртку дадут, как в руме.
Угу, понял.
А в руме не так?
источник

КР

Кирилл Романенко... in Kotlin Community
Quantum Harmonizer
Угу, понял.
А в руме не так?
Ну в руме ты описываешь интерфейс, и тебе отдают тот тип, который ты указал. Вот захотел ты получать от бд какой-то другой реактивный стрим, не flow или observable, тебе придётся либо маппить самому одно в другое, либо ждать дадут из коробки. А в sqldelight ты написал один экстеншен, внутри которого вешаешь самый простейший обзервер на query, и всё у тебя хорошо.
источник

QH

Quantum Harmonizer in Kotlin Community
Кирилл Романенко
Ну в руме ты описываешь интерфейс, и тебе отдают тот тип, который ты указал. Вот захотел ты получать от бд какой-то другой реактивный стрим, не flow или observable, тебе придётся либо маппить самому одно в другое, либо ждать дадут из коробки. А в sqldelight ты написал один экстеншен, внутри которого вешаешь самый простейший обзервер на query, и всё у тебя хорошо.
А что мешает в руме зарегать адаптер? Разве там не такая же система, как в ретрофите или гсоне?
источник

КР

Кирилл Романенко... in Kotlin Community
Quantum Harmonizer
А что мешает в руме зарегать адаптер? Разве там не такая же система, как в ретрофите или гсоне?
Может я что-то пропустил, но насколько я знаю - нет. Я интересовался этой темой в последний раз когда ждал поддержку flow. Её можно было получить только дождавшись когда разрабы room выпустят апдейт, самому руками нельзя было прикрутить.
источник

D

Denys in Kotlin Community
Адаптеры в Room можно делать для маршалинга. А получать Query только для пред-определенных контейнеров. В теории, можно возвращать Observable/Flow и делать прослойку для своего реактивного интерфейса.
источник

КР

Кирилл Романенко... in Kotlin Community
Denys
Адаптеры в Room можно делать для маршалинга. А получать Query только для пред-определенных контейнеров. В теории, можно возвращать Observable/Flow и делать прослойку для своего реактивного интерфейса.
Вот я о том же. :)
источник

QH

Quantum Harmonizer in Kotlin Community
Кирилл Романенко
Может я что-то пропустил, но насколько я знаю - нет. Я интересовался этой темой в последний раз когда ждал поддержку flow. Её можно было получить только дождавшись когда разрабы room выпустят апдейт, самому руками нельзя было прикрутить.
Жесть, вот же говнище, оказывается. Спасибо.
источник

D

Denys in Kotlin Community
Ну, Room ведь на кодогенерации построен. :)
источник

QH

Quantum Harmonizer in Kotlin Community
Denys
Ну, Room ведь на кодогенерации построен. :)
Да, но можно же было гибко сделать.
источник

КР

Кирилл Романенко... in Kotlin Community
Denys
Ну, Room ведь на кодогенерации построен. :)
Так и sqldelight, разве нет?) Он генерирует котлин код на основе твоих конфигов.
источник

КР

Кирилл Романенко... in Kotlin Community
Quantum Harmonizer
Да, но можно же было гибко сделать.
Вот в sqldelight тебе и дают query. :) По сути, если тебя что-то не устраивает в экстеншене для flow, ты можешь написать его сам.
https://github.com/cashapp/sqldelight/blob/master/extensions/coroutines-extensions/src/commonMain/kotlin/com/squareup/sqldelight/runtime/coroutines/FlowExtensions.kt
источник

D

Denys in Kotlin Community
Кирилл Романенко
Так и sqldelight, разве нет?) Он генерирует котлин код на основе твоих конфигов.
Исправляюсь: s/кодогенерация/annotation processing
источник

AH

Ayrat Hudaygulov in Kotlin Community
Вопрос по ktor
надо добавить дефолтный обработчик, что-то вида

get "/" { ... }
default { //any route, any method
   call.respond(NotFound, "Page hasn't been found")
}

то есть если из зарегистрированных ничего не тригернулось, в конце вызвать дефолтный, котороый точно стригерится и захендлит вызов с логикой
Не нашёл в упор как сделать из коробки без хаков
источник

RI

Ruslan Ibragimov in Kotlin Community
Ayrat Hudaygulov
Вопрос по ktor
надо добавить дефолтный обработчик, что-то вида

get "/" { ... }
default { //any route, any method
   call.respond(NotFound, "Page hasn't been found")
}

то есть если из зарегистрированных ничего не тригернулось, в конце вызвать дефолтный, котороый точно стригерится и захендлит вызов с логикой
Не нашёл в упор как сделать из коробки без хаков
источник

AH

Ayrat Hudaygulov in Kotlin Community
блин, и правда... а чо я день мучался -_-
источник

K

Kopusha in Kotlin Community
Есть какой-то смысл писать foo.not() вместо !foo, кроме чтоб показать, что ты знаешь про not()?
источник

RI

Ruslan Ibragimov in Kotlin Community
Kopusha
Есть какой-то смысл писать foo.not() вместо !foo, кроме чтоб показать, что ты знаешь про not()?
В теории если слишком сложный предикат и не хочется вводить скобочки
источник

RI

Ruslan Ibragimov in Kotlin Community
Можно еще что-то такое написать:
listOf<Boolean>().filter(Boolean::not)
источник