Size: a a a

Kotlin Community

2019 October 27

F

FOX in Kotlin Community
Vladimir Petrakovich
Есть инфа, что можно написать приложение без Rx/Flow
Можно и без, но если цель разобраться с этим, то лучше на практике
источник

VP

Vladimir Petrakovich in Kotlin Community
FOX
Можно и без, но если цель разобраться с этим, то лучше на практике
Ну с такими целями можно взять любую из этих либ вне зависимости от размера/сложности приложения 🤷‍♂️
источник

BP

Bogdan Panchenko in Kotlin Community
источник

F

FOX in Kotlin Community
Vladimir Petrakovich
Ну с такими целями можно взять любую из этих либ вне зависимости от размера/сложности приложения 🤷‍♂️
я разбираюсь с корутинами, поэтому flow
источник

KG

Kirill Gamazkov in Kotlin Community
FOX
Скажите, а в Котлине Flow это теже потоки как и в RxJava?
Да, Flow - это по духу реактивный стрим, хоть и не соответствует спецификации reactivestreams.org. Но если надо, есть методы Flow.toPublisher() и Publisher.toFlow().
Для нового проекта настоятельно советую взять Flow.
Т. к. Rx сильно усложнён, он пытается sturctured concurrency втащить помимо прочего. Кастомные операторы к нему писать то ещё удовольствие. У Flow с этим куда как лучше
источник

KG

Kirill Gamazkov in Kotlin Community
Бага в смарткасте или у меня в голове?

sealed class Demo {
   data class Some(
       val thing: Any
   ) : Demo()
}

fun smartCastFail(d: Demo) {
   when(d!!) {
       is Demo.Some -> d.thing // из-за "!!" не видит "thing"
   }
}
источник

AA

Andrey Antipov in Kotlin Community
Kirill Gamazkov
Бага в смарткасте или у меня в голове?

sealed class Demo {
   data class Some(
       val thing: Any
   ) : Demo()
}

fun smartCastFail(d: Demo) {
   when(d!!) {
       is Demo.Some -> d.thing // из-за "!!" не видит "thing"
   }
}
У тебя в голове. Ты when матчишь по одному значению (d!!), а смарт каст хочешь для другого (d).
источник

AL

Alexander Levin in Kotlin Community
Kirill Gamazkov
Бага в смарткасте или у меня в голове?

sealed class Demo {
   data class Some(
       val thing: Any
   ) : Demo()
}

fun smartCastFail(d: Demo) {
   when(d!!) {
       is Demo.Some -> d.thing // из-за "!!" не видит "thing"
   }
}
Немного сложный вопрос.

С одной стороны d!! = d именно тут, т.е. можно сказать, что в смарт касте.
С другой стороны формально это две разных вещи (т.е. мы вывели, что d!! это Some, но технически говоря это не d)
источник

RE

Roman Elizarov in Kotlin Community
При желании, конечно, можно было бы научить компилятор понимать что d!! и d это одно и то же. Пишите запрос в http://kotl.in/issue
источник

AO

Alexey Otts in Kotlin Community
Но надо ли 🤔
источник

AA

Andrey Antipov in Kotlin Community
Alexander Levin
Немного сложный вопрос.

С одной стороны d!! = d именно тут, т.е. можно сказать, что в смарт касте.
С другой стороны формально это две разных вещи (т.е. мы вывели, что d!! это Some, но технически говоря это не d)
Нет, в общем случае d!! != d, так что вывод не верный.
источник

KG

Kirill Gamazkov in Kotlin Community
Andrey Antipov
Нет, в общем случае d!! != d, так что вывод не верный.
Пример в студию
источник

AA

Andrey Antipov in Kotlin Community
Kirill Gamazkov
Пример в студию
null!! - KNPE
null - вполне себе значение
источник

AO

Alexey Otts in Kotlin Community
Просто, тут  when по выражению, и для этого уже есть же when(val a = d!!)
источник

AA

Andrey Antipov in Kotlin Community
Kirill Gamazkov
Пример в студию
Вообще для всех нуллабельных типов нельзя утверждать, что d!! == d
источник

D

Denys in Kotlin Community
Alexey Otts
Просто, тут  when по выражению, и для этого уже есть же when(val a = d!!)
when (val foo = ..) { выглядит очень некрасиво почти всегда, к сожалению. :(
источник

AO

Alexey Otts in Kotlin Community
Denys
when (val foo = ..) { выглядит очень некрасиво почти всегда, к сожалению. :(
Вкусовщина
источник

KG

Kirill Gamazkov in Kotlin Community
Andrey Antipov
null!! - KNPE
null - вполне себе значение
И?
Если мы дошли до ветки is Demo, а не упали на when(d!!) -  мы уже знаем, что d!! == d
источник

AL

Alexander Levin in Kotlin Community
Andrey Antipov
Нет, в общем случае d!! != d, так что вывод не верный.
Ну, я сказал именно тут :)

Т.е. для non-nullable типа d!! = d
Но и для nullable типов конкретно тут можно говорить о том, что либо мы взорвёмся и нам уже всё равно, либо все проверки для d!! применимы всё-таки для d (примечание - я не уверен, что эта логика обобщима для любого кейса)
источник

AA

Andrey Antipov in Kotlin Community
Kirill Gamazkov
И?
Если мы дошли до ветки is Demo, а не упали на when(d!!) -  мы уже знаем, что d!! == d
Ну ты хочешь, чтобы компилятор скомбинировал два каста в один: нулл-чек и is чек. По мне, так один из чеков лишний, так как если d is Some, он не может быть null
источник