Size: a a a

Kotlin Community

2019 October 27

AL

Alexander Levin in Kotlin Community
Andrey Antipov
Ну ты хочешь, чтобы компилятор скомбинировал два каста в один: нулл-чек и is чек. По мне, так один из чеков лишний, так как если d is Some, он не может быть null
Ну это уже немного вопрос стилистики, ибо есть и другие варианты получить аналогичную проблему (например выражение d ?: return)
источник

KG

Kirill Gamazkov in Kotlin Community
Andrey Antipov
Ну ты хочешь, чтобы компилятор скомбинировал два каста в один: нулл-чек и is чек. По мне, так один из чеков лишний, так как если d is Some, он не может быть null
Чек не лишний, если я хочу exhaustive when и не хочу писать бойлерплейт в null-ветку.
В реальном коде я Flux'у передаю лямбду. Я-то знаю, что там null не прилетит, но для котлина это интероп с джавой и тип с восклицательным знаком
источник

AA

Andrey Antipov in Kotlin Community
Kirill Gamazkov
Чек не лишний, если я хочу exhaustive when и не хочу писать бойлерплейт в null-ветку.
В реальном коде я Flux'у передаю лямбду. Я-то знаю, что там null не прилетит, но для котлина это интероп с джавой и тип с восклицательным знаком
Ну тип с ! можешь без всех этих чеков расценивать как не нуллабл, если ты уверен, что там не нулл
источник

KG

Kirill Gamazkov in Kotlin Community
Andrey Antipov
Ну тип с ! можешь без всех этих чеков расценивать как не нуллабл, если ты уверен, что там не нулл
Компилятор ещё надо убедить, что там null не будет
источник

AL

Alexander Levin in Kotlin Community
Kirill Gamazkov
Компилятор ещё надо убедить, что там null не будет
Так в случае с platform type компилятор с радостью поверит.
источник

AA

Andrey Antipov in Kotlin Community
Kirill Gamazkov
Компилятор ещё надо убедить, что там null не будет
Давай тогда пример с тем, что компилятор не верит в платформ тип с !
В твоём примере выше нет таких типов.
источник

KG

Kirill Gamazkov in Kotlin Community
Alexander Levin
Так в случае с platform type компилятор с радостью поверит.
Нет, будет требовать в when null-ветку.

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

fun
fluxDemo() {
   Stream.of<Demo>(Demo.None)
           .map {
               when(it) {
                   Demo.None -> 1
                   is Demo.Some -> it.thing
               }
           }
}
источник

AA

Andrey Antipov in Kotlin Community
Kirill Gamazkov
Нет, будет требовать в when null-ветку.

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

fun
fluxDemo() {
   Stream.of<Demo>(Demo.None)
           .map {
               when(it) {
                   Demo.None -> 1
                   is Demo.Some -> it.thing
               }
           }
}
Flux - что это такое? Java либа какая-то?
источник

KG

Kirill Gamazkov in Kotlin Community
Да, реактивщина. projectreactor
источник

AA

Andrey Antipov in Kotlin Community
Kirill Gamazkov
Да, реактивщина. projectreactor
Сложно, но идёю я понял. Сейчас на стримах попробую
источник

KG

Kirill Gamazkov in Kotlin Community
Alexander Levin
Так в случае с platform type компилятор с радостью поверит.
Эээээ... похоже на то. Во втором примере ни ошибок, ни предупреждений после того, как я его поправил.
В прошлой версии Идеи были вроде...
Я что-то сам уже запутался
источник

AA

Andrey Antipov in Kotlin Community
Andrey Antipov
Сложно, но идёю я понял. Сейчас на стримах попробую
Чё-то на стримах не получилось воспроизвести. Всё компилится и работает на ура:
fun main() {
   Stream.of<Demo>(None, Some(1))
           .map<Any> {
               when (it) {
                   is None -> 0
                   is Some -> it.thing
               }
           }
           .forEach(::println)
}

sealed class Demo {
   object None : Demo()
   data class Some(val thing: Any) : Demo()
}
источник

AA

Andrey Antipov in Kotlin Community
Ломается, как и должно, если на создании стрима явно указать тип .of<Demo?>(None, Some(1))
источник

D

Denys in Kotlin Community
@noraltavir Не затруднит ли вас как-то тезисно набросать наиболее частые проблеммы в преподавании Kotlin'а в качестве первого языка или для людей с очень небольшим опытом программирования?
источник

AN

Alexander Nozik in Kotlin Community
Konstantin Zolotov
Пока что вряд ли. Либо много операторов писать самому.
А можно пример такого оператора с объяснением, что он делает?
источник

AN

Alexander Nozik in Kotlin Community
Denys
@noraltavir Не затруднит ли вас как-то тезисно набросать наиболее частые проблеммы в преподавании Kotlin'а в качестве первого языка или для людей с очень небольшим опытом программирования?
Как первого языка проблем не вижу. Просто не надо сразу рассказывать ужасти вроде проекций. Есть скорее проблема преподавания программирвоания вцелом. Его не надо рассказывать как теорию. Нужно вести куср как для инженерной дисциплины вроде радиотехники
источник

AN

Alexander Nozik in Kotlin Community
Собственно не знаю, как в Питере (это надо @relizarov) спросить, но на физтехе, я четко чувствую, что наших IT-шников мало (а точнее не всех) учат программировать. Алогритмы - да, теория - да, а программировать - нет.
источник

D

Denys in Kotlin Community
Alexander Nozik
Как первого языка проблем не вижу. Просто не надо сразу рассказывать ужасти вроде проекций. Есть скорее проблема преподавания программирвоания вцелом. Его не надо рассказывать как теорию. Нужно вести куср как для инженерной дисциплины вроде радиотехники
У меня, к счастью или к сожалению, что-то вроде менторства очень небольшого количества людей и с уклоном в ремесленичество (тоесть собираюсь делать фокус на практические навыки и мотивирование для тех, кто умеет структурированно мыслить).

Поэтому личные встречи запланированы как часть процесса. Сейчас делаю исследование на тему того как в таком случае обучать людей, чего избегать и какие проблеммы могут возникнуть.
источник

AN

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

Поэтому личные встречи запланированы как часть процесса. Сейчас делаю исследование на тему того как в таком случае обучать людей, чего избегать и какие проблеммы могут возникнуть.
Ну если мы говорим про программирование, а не про CS, то единственный способ этому научиться - это программировать. Поэтому мне кажется, что надо а) показывать практический пример решения задачи, б) заставлять людей сделать хоть маленький, но проектик. Это довольно муторно и трудозатратно, кроме того, это нельзя сделать за пару встреч, но это самое оно. В принципе, пройти koans и задать вопросы - это хороший старт.
источник

AN

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