@kotlin_lang

Страница 813 из 982
Konstantine
16.08.2018
14:18:28
Может кто объяснить момент из этой статьи? https://medium.com/capital-one-developers/coroutines-and-rxjava-an-asynchronicity-comparison-part-3-transferring-stream-of-values-e858f4233791 val channel = Channel<Int>() launch { for (i in 1..5) { channel.send(i) } }launch { for (value in channel) { consumeValue(value) } }Вот в этом моменте. Каким образом вторая корутина будет понимать, что в канале будет 5 элементов?

Мне по логике кажется, что первая корутина пошлет элемент, а вторая пойдет в канал и получит, что у нее всего 1 элемент там внутри, после чего закончит цикл.

Первая корутинаже суспендится на втором send'е, значит в канале всегда всего одно значение

Andrew
16.08.2018
14:33:21
Первая корутинаже суспендится на втором send'е, значит в канале всегда всего одно значение
for по каналу завершится тогда, когда канал закроется. Если значения в канале нету, но он не закрыт, она засаспендится.

Google
Konstantine
16.08.2018
14:34:08
Вот оно что. Спасибо.

Andrew
16.08.2018
14:34:30
Но вот то, что канал не закрыт, меня смущает. По-моему, второй for не завершится, ибо будет до конца своих дней ждать следующее значение.

Andrew
16.08.2018
14:36:55
А вот со следующим примером с produce уже всё ок, там оно закроется по выходу из лямбды :)

Konstantine
16.08.2018
14:39:51
Оно ж для обучения. Странно, что на этом не заострили внимания, ибо я, признаться, сломался на это for.

Andrew
16.08.2018
14:42:18
Оно ж написано людьми и вряд ли серьёзно вычитано. Можно в комменты сходить, ругнуться, наверняка исправят)

Руслан
16.08.2018
14:43:38
Вообще для обучения лучше всего дока которая из коробки идет, там все очень хорошо описано: https://github.com/Kotlin/kotlinx.coroutines/blob/master/coroutines-guide.md

Andrew
16.08.2018
14:47:05
Равно как и некоторые аналогии с rx тут: https://github.com/Kotlin/kotlinx.coroutines/blob/master/reactive/coroutines-guide-reactive.md

Konstantine
16.08.2018
15:21:33
Alexander
16.08.2018
15:29:50
Лично я пришел не с rx, а с CompletableFuture. Корутины конечно значительно удобнее, но там есть ньюансы. В корутнах нет совсем простого способа прицепить действие в конец уже существующего. Мой опыт подсказывает, что это в любом случае не очень хорошая идея, но все же.

Alexander
16.08.2018
15:47:08
не совсем. CompletableFuture позволяет делать довольно сложные разветвленные структуры из зависимостей, где следующая стадия выполняется когда выполнены все предыдущие. Корутины делают то же самое при помощи await, но этот самый await нужно запускать в корутине, так что для того, чтобы что-то прицепить в конец, надо делать новый launch. В принципе не много гемороя, но идеология разная.

Разумеется, если сразу все проектировать под корутины, то проблемы не возникает.

Google
Andrew
16.08.2018
15:52:30
Я ж правильно понимаю, что если мне захотелось в expect class обычных методов / пропертей, то мне придётся писать обычный класс с этими методами и пропертями, делегирующий всё остальное в expect class? Или это таки делается проще?
Рисуется что-то такое: interface IMyClass { fun expectedFun() } internal expect class MyClassPlatform(expectCtorArg: Int): IMyClass { override fun expectedFun() } class MyClass internal constructor(platform: MyClassPlatform): IMyClass by platform { val usualProp: String = "Hello world" fun usualFun() { println(usualProp) } } fun MyClass(ctorArg: Int) = MyClass(MyClassPlatform(ctorArg)) fun usage() { val obj = MyClass(5) obj.expectedFun() obj.usualFun() } и выглядит как-то излишне многословно. Может, я что-то упускаю?

Ну хотя с другой стороны за счёт интерфейса, выходит, можно определять, какие методы будут торчать наружу, а какие доступны только через platform, который можно сделать val. Может, оно и нормально.

Quantum Harmonizer
16.08.2018
17:52:44


Igor
16.08.2018
17:57:13
Вроде все легитимно, KProperty<*>? же супертип KProperty<*> ?

Quantum Harmonizer
16.08.2018
18:00:21
Легитимно. Только теперь я уже не могу угадать, зачем...

Di7aK
16.08.2018
18:39:38
ну в котлетках же нулловый тип считается другим

Igor
16.08.2018
18:45:40
Но сабтайпинг соблюдается http://natpryce.com/articles/000818/nullable-hierarchy.png

Alexander
16.08.2018
19:02:17
Кто-нибудь в курсе, в инлайн классах можно делать делегаты? Я подозреваю, что нет, но может быть...

Имеются в виду проперти делегаты, которых в интерфейсах низя.

Andrew
16.08.2018
19:24:15
Inline class cannot have backing fields Hence, it follows that inline class can have only simple computable properties (no lateinit/delegated properties) https://github.com/Kotlin/KEEP/blob/master/proposals/inline-classes.md

Alexander
16.08.2018
19:27:55
Очень жаль. Вообще есть у меня желание предложить делегаты без филдов. Их можно было бы в интерфейсы и инлайн классы пихать. Принципиальных преград не вижу. Только синтаксис

Alexander
16.08.2018
19:35:22
Ага

ЕВГЕНИЙ
16.08.2018
21:19:44
Добрый вечер, не могу найти чет, в котлин есть методы по умолчанию в интерфейсе?

Mi
16.08.2018
21:23:01
Есть

Alexander
16.08.2018
21:34:30
Добрый вечер, не могу найти чет, в котлин есть методы по умолчанию в интерфейсе?
Привет. Да, есть, вот упоминание в доке: https://kotlinlang.org/docs/reference/interfaces.html#interfaces Минимальный пример (Ключевых слов нету, просто пишешь имплементацию метода) interface Sizeable { var size: Int fun isEmpty() = size == 0 }

Di7aK
17.08.2018
05:09:03
как вы код подсвечиваете в телеге?

Egor
17.08.2018
05:09:48
три апострофа впереди и сзади

Google
Di7aK
17.08.2018
05:12:36
и как в котлине сделать блок на случай если филд нулл

типа ?.let{} но на другой случай

Di7aK
17.08.2018
05:16:38
он не подходит

Vladimir
17.08.2018
05:16:50
Почему?

Di7aK
17.08.2018
05:17:33
потому что я давно не использую if

котлин призван избавить нас от циклов и ifов

Vladimir
17.08.2018
05:17:50
А, ну тогда понятно

Попахивает фанатизмом

Di7aK
17.08.2018
05:18:33
неужели нет оператора

просто ставить еще три громоздких строки не очень выглядит

Vladimir
17.08.2018
05:19:36
А какой контекст?

Vladimir
17.08.2018
05:19:50
Может, вам ?: нужен

Di7aK
17.08.2018
05:20:15
нет

хотя это было давно, сейчас мне такое не нужно было было пока

Alexander
17.08.2018
05:37:45
котлин призван избавить нас от циклов и ifов
В kolin if - функция, по крайней мере синтаксически от нее неотличим. Можно сделать свое собственное расширение, анологичное let, но если это вопрос идеологический, тогда ничем не могу помочь.

Di7aK
17.08.2018
05:39:06
как я добавлю лямбдапремник на нулловый филд

Ilya
17.08.2018
05:47:02
Alexander
17.08.2018
05:47:21
Генерики

https://github.com/JetBrains/kotlin/blob/1.2.60/libraries/stdlib/src/kotlin/util/Standard.kt#L96

Google
Руслан
17.08.2018
08:42:47
@kotlin_jobs

qb
17.08.2018
08:43:36
Понял. Спасибо

Admin
ERROR: S client not available

Quantum Harmonizer
17.08.2018
08:44:04
> с опытом работы с блокчейном мб в бан лучше сразу?

qb
17.08.2018
08:44:13
Зачем?

Я чем то помешал?

Farid
17.08.2018
08:49:48
Почему котлин, а не джава? Желательно конструктива

Alexander
17.08.2018
08:51:35
Чувак, слабо это в Гугле набрать? Это очень конструктивно

Farid
17.08.2018
08:51:53
Мне бы мнение котлинеров

Dmitry
17.08.2018
08:52:07
В гугле оно есть

Quantum Harmonizer
17.08.2018
08:52:31
и в поиске по всем околоджавовым чатам, включая этот, есть

Dmitry
17.08.2018
08:52:56
А вот нафига блокчейном заниматься сидя именно в Минске - интересный вопрос -) Но тоже оффтопный.

Alexander
17.08.2018
08:53:10
Статей уже вагон

Ivan
17.08.2018
08:53:36
Почему котлин, а не джава? Желательно конструктива
Потому что Котлин более лаконичный, безопасный, удобный, современный, эффективный. Не страдает от многословности и многих ошибок дизайна Джавы, пользуясь всеми ее преимуществами, и вообще гораздо приятнее в обращении.

Alexey
17.08.2018
08:55:03
Quantum Harmonizer
17.08.2018
08:55:28
А вот нафига блокчейном заниматься сидя именно в Минске - интересный вопрос -) Но тоже оффтопный.
да и нафига искать именно «блокчейн-разработчиков» тоже не особо понятно, сегодня блокчейн, завтра блочные шифры, позавчера модульная алгебра

Dmitry
17.08.2018
08:55:54
Потому что это одна из стран где крипты не нон грата?
В других странах блокчейн код писать запрещено?

Alexey
17.08.2018
08:56:11
нет, но как бы почему бы и не минск?

Денис
17.08.2018
08:56:47
Добрый день. Опытные котлиновцы, подскажите как можно изменить этот код. Есть список ошибок, который прилетает с сервера. Порядок их обработчки важен. То есть если в списке ошибок может быть ошибка с кодом 1, то ее приоритетнее обработать, чем 2. Но прилетает список с сервера неупорядрченным. Нужно обработать первую более приоритетную ошибку и выйти из forEach. Не сооброжу как это реализовать. Помогите, пожалуйста. errors.forEach { when (it.code) { 1 -> { // здесь что-то делаю и нужно выйти из цикла forEach } 2 -> { // здесь что-то делаю и нужно выйти из цикла forEach } 3 -> { // здесь что-то делаю и нужно выйти из цикла forEach } } }

Google
Quantum Harmonizer
17.08.2018
08:57:02
Dmitry
17.08.2018
08:57:07
нет, но как бы почему бы и не минск?
Потому что лишние ограничения - маразм. Можно с такой логикой искать разработчика, у которого длинна волос от 5 до 7 см.

Alexey
17.08.2018
08:57:21
про крипту не было ни слова
тред не читай - отвечай /shrug

Руслан
17.08.2018
08:57:24
Quantum Harmonizer
17.08.2018
08:57:38
тогда и писать надо было «мы смузихлёбы, распильщики бабла, нам нужен писатель смартконтрактов под эфир»

Andrew
17.08.2018
09:00:39
А под сам блокчейн конкретный набор знаний не нужен? Распределённые системы, алгоритмы на графах, криптография. Ну и да, @pofftop.

Марат
17.08.2018
09:01:30
Добрый день, а все в idea кодят или есть кто в атоме или вскод?

Марат
17.08.2018
09:04:14
А то чет идея с каждым обньвлением все лагучей становится, хотя комп не слабый и vm options ей менял, один фиг лагает при не валидном синтаксисе

Страница 813 из 982