@kotlin_lang

Страница 614 из 982
Ivan
31.03.2018
17:45:48
Надо посмотреть, как в Arrow это решается

Mikhail
31.03.2018
17:46:08
можно разрешить DataContainer принимать nullable классы)
Тогда может вообще убрать Null-Safety?

Семен
31.03.2018
17:46:33
я же не предлагаю писать getOne()!!

Google
Ivan
31.03.2018
17:46:35
И заживем

Бэк ту джава

Семен
31.03.2018
17:46:52
я к тому, чтобы перенести проверку на null туда где она реально нужна

зависит от контекста конечно

Mikhail
31.03.2018
17:47:13
У тебя не получится сделать ту же логику без фабричного метода

Ivan
31.03.2018
17:47:54
Option.monad().binding { val a = Some(1).bind() val b = Some(1 + a).bind() val c = Some(1 + b).bind() a + b + c } //Some(value=6)

Boris
31.03.2018
17:48:03
val val1 = one() val val2 = two() val val3 = three() if (val1 != null && val2 != null && val3 != null) { DataContainer(val1, val2, val3) }

Семен
31.03.2018
17:48:25
нет, просто параметры DataContainer будут nullable типов, а проверять на null их будешь там, где используешь поля

это может оказаться как удобнее, так и кошмаром

зависит от ситуации)

Ivan
31.03.2018
17:48:50
Я как раз этого избежать хочу

Чтобы на выходе либо точно получились нормальные данные, либо по пути оно отвалилось, не сконструировавшись

Google
Ivan
31.03.2018
17:49:27
Причем каждый следующий шаг не имеет смысла без успешного завершения предыдущего

В чем как раз состоит минус ручной проверки в if всех трех значений на null. Ленивости нет.

Ну, не говоря уже о том, что это выглядит не очень красиво

Ivan
31.03.2018
17:51:16
Функционально да, но лесенка выглядит уродливо. Я думал, может есть какой-нибудь способ, о котором я не знаю.

Семен
31.03.2018
17:51:25
пиши кароч икстеншн функцию )

Boris
31.03.2018
17:51:48
пиши кароч икстеншн функцию )
так экстеншн не поможет

Берял
31.03.2018
17:52:40
попробуй накостылить через корутины

Boris
31.03.2018
17:52:47
тогда придется выполнить все методы, чтобы передать значения в экстеншн, а тут выяснилось, что следующий шаг имеет смысл только если предыдущий выполнился

Igor
31.03.2018
17:53:00
https://www.youtube.com/watch?v=ocS-UVZG5iE
Microsoft приложило руку к созданию котлина ? (шок-сенсации)

Igor
31.03.2018
17:55:14
Кстати, интересно, а откуда команда-котлина взяла свои офигеные suspend функции? Прям не верится что они первые это придумал, такой подход.

Quantum Harmonizer
31.03.2018
18:03:52
Gleb
31.03.2018
18:04:56
Кстати, интересно, а откуда команда-котлина взяла свои офигеные suspend функции? Прям не верится что они первые это придумал, такой подход.
Мне верится. Идея взять async из какого-нибудь жса или сишарпа и сделать await по умолчанию лежит достаточно на поверхности

Igor
31.03.2018
18:07:19
Я кстати вспомнил, Роман как-то в докладе ссылался на корутины в lisp и типа первоночально (вроде) вместо suspend было что-то прям из лиспа

Bogdan
31.03.2018
18:07:38
Кстати, интересно, а откуда команда-котлина взяла свои офигеные suspend функции? Прям не верится что они первые это придумал, такой подход.
ну вроде это придумал элизаров,, +- я про саспенд, да и думаю раньше в эпоху одноядерности много что придумывалось, может с тех времен

Ivan
31.03.2018
20:11:02
Удалось ужать до такого состояния: maybe { getOne() } add { getTwo() } add { getThree() } map { DataContainer( one = yield(), two = yield(), three = yield() ) }

Google
Ivan
31.03.2018
20:11:26
Имплементация: https://pastebin.com/sySH33vb Получилось кривовато, но приятнее, чем с кучей коллбеков, на мой взгляд

Boris
31.03.2018
20:13:19
Очевидность такого решения очень низкая, я бы такое не стал использовать

Roman
31.03.2018
20:48:50
Идеоматично такой код вынести в фунцию и писать: ``` val one = getOne() ?: return null val two = getTwo() ?: return null val three = getThree() ?: return null return DataContainer(one, two, three) ```

Dibro
31.03.2018
20:49:04
Назар
31.03.2018
20:52:08
Привет всем. Помогите плиз, кто шарит. Есть базовая модель в которой есть филда вложеной модели. Но эта байда не хочет мапиться. Компилятор предлагает кастить к Nothing?..Не помогает, естественно.





Dibro
31.03.2018
20:56:10
не то спросил

что конкретно приходит в лямбду под it?

Quantum Harmonizer
31.03.2018
20:57:17
там где-то out variance

Назар
31.03.2018
20:57:23
созданый дата класс



Dibro
31.03.2018
20:58:46
попробуй генерик наследовать не от Any?, а от Any

Назар
31.03.2018
20:58:56
пробовал, тоже самое

всегда пишет required Nothing?

Dibro
31.03.2018
21:00:43
созданый дата класс
такое чувство, что там затирается генерик

типа BaseModel<*>

Назар
31.03.2018
21:15:28
Дженерики всегда чет с приключениями даются

Ivan
31.03.2018
21:18:22
@relizarov @Dibro Спасибо за ответ.

Google
Maxim
01.04.2018
09:02:08
Кто может помочь в лс с одним вопросом?

Boris
01.04.2018
09:06:12
Если вопрос по котлин, то можно и здесь спросить

Maxim
01.04.2018
09:08:53
Не могу понять почему при объявлении функции, когда я даю ей своё имя, ide ругается и пишет что это имя нигде не используется. Вот например простейшая функция: fun max(a:Int, b:Int):Int { return if (a>b) a else b }

Boris
01.04.2018
09:10:34
Может дело в том, что она нигде не используется?

Даниил
01.04.2018
09:13:12
лол

Kirill
01.04.2018
11:57:03
Вроде не оффтоп: https://twitter.com/shipilev/status/980388506244612096 :)

Руслан
01.04.2018
11:57:44
Мне кажется или Леша зазнался, и считает что работа над Kotlin/Js куда менее важная и интересная чем его?

Kirill
01.04.2018
12:00:06
Мне кажется или Леша зазнался, и считает что работа над Kotlin/Js куда менее важная и интересная чем его?
Но ведь его работа и правда важнее? С точки зрения "impact'a"(как по-русски?) на остальных.

Руслан
01.04.2018
12:01:18
Ну прям сейчас - нет, кажется шенадой пользуется примерно столько же сколько kotlin/js

Quantum Harmonizer
01.04.2018
12:02:48
Руслан
01.04.2018
12:02:59
Ага, я ж говорю - элитарность

Quantum Harmonizer
01.04.2018
12:17:07
@aleksey_shipilev ты зазнался короч

Pavel ?
01.04.2018
12:18:50
Леша нормально троллит))

Boris
01.04.2018
12:23:21
Я бы в это не поверил даже если бы было не 1 апреля, кстати всех с праздником! ?

Ну JS это нечто смехотворное, а JVM — штука серьёзная.
В этой сентенции я бы согласился с тем, что жс местами очень смешной

Valentin
01.04.2018
12:51:25
заскринил

Kirill
01.04.2018
13:27:55
оперативно :)

Google
Oleksandr
01.04.2018
13:54:42
А императивных языка придумали писать последовательно код, одна строчка за другой. Это и есть do-нотация.
не совсем, в do поток выполнения может прерываться, корректнее будет "do можно записать в императивном стиле, если руками расставить все проверки"

Ключевая разница в том, что императивные языки "из коробки" поддерживают фиксированный набор монад над которыми работает их "do нотация". Обычно это IO и Try монады. Такой выбор определяется прагматикой (это то, что программистам нужно чаще всего). В функциональных языках общий синтаксис для любой монады. Однако, известно что "continuation is the mother of all mondas", так что с поддержкой корутин в котлине любители побаловаться экзотическими монадами могу легко сделать для них do-нотацию поверх корутин (в Arrow это успешно реализовано).
нет, не поддерживают, тк императивные операции не есть монадами в строгом смысле обзывать "обычные строчки кода" ио нельзя ещё и потому, что теряется главный смысл всех плясок с монадами -- отделение pure кода дальше, кому это "всем известно" ? аналогия "монада -- это буррито" где-то такая же точная и верная, как это высказывание в статье

это ж не фейк акк, надеюсь? и я даже могу ожидать нормальную дискуссию?

Kirill
01.04.2018
14:10:06
это ж не фейк акк, надеюсь? и я даже могу ожидать нормальную дискуссию?
Это не фейк. "Нормальность" дискуссии будет зависеть от тебя :)

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