
Mikhail
31.03.2018
17:45:28

Ivan
31.03.2018
17:45:48
Надо посмотреть, как в Arrow это решается

Mikhail
31.03.2018
17:46:08

Семен
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. Ленивости нет.
Ну, не говоря уже о том, что это выглядит не очень красиво

Boris
31.03.2018
17:50:28

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

Семен
31.03.2018
17:53:42

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

Quantum Harmonizer
31.03.2018
18:03:52

Gleb
31.03.2018
18:04:56

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

Bogdan
31.03.2018
18:07:38

Mikhail
31.03.2018
18:34:50

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
Очевидность такого решения очень низкая, я бы такое не стал использовать

Руслан
31.03.2018
20:37:31

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
лол

Ivan
01.04.2018
10:29:26

Albert
01.04.2018
11:28:59

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

Руслан
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 ты зазнался короч

Kirill
01.04.2018
12:17:51

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

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

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

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

Google

Oleksandr
01.04.2018
13:54:42
это ж не фейк акк, надеюсь?
и я даже могу ожидать нормальную дискуссию?


Kirill
01.04.2018
14:10:06