
Roman
21.03.2017
07:48:48

Quantum Harmonizer
21.03.2017
07:49:20

Igor
21.03.2017
07:49:33

Roman
21.03.2017
07:49:59
можно
что можно сделать? =)

Google

Igor
21.03.2017
07:50:05
У нас и для val кустом геттер может вернуть null

Roman
21.03.2017
07:50:08

Михаил
21.03.2017
07:50:16
что можно сделать? =)
return locationInteractor.onAppStop().takeIf{userStateInteractor.isUserLoggedIn && locationInteractor != null}
?: Completable.complete()
:)

Igor
21.03.2017
07:50:25

Михаил
21.03.2017
07:50:30
не уверен что именно так скомпилируется
но примерно

Igor
21.03.2017
07:50:38

Roman
21.03.2017
07:50:58
но примерно
спасибо за идею, хотя не могу сказать что прямо стало хорошо =) короче - да

Igor
21.03.2017
07:51:47

Михаил
21.03.2017
07:51:48
return locationInteractor?.onAppStop().takeIf{userStateInteractor.isUserLoggedIn}
?: Completable.complete()
даже так

Google

Roman
21.03.2017
07:51:59
зачем вся эта возня с нулабилити и все эти запреты понятно. не понятно как с этим всем делать красивый код

Alexey
21.03.2017
07:53:21
с котлином сложно) Надо больее многословными языками пользоваться для красивого кода

Igor
21.03.2017
07:53:25

Roman
21.03.2017
07:54:02

Igor
21.03.2017
07:55:23
в каком месте? в вызове?
Ну типа: private var locationInteractor: LocationInteractor = LocationInteractor.EMPTY (тип можно опустить)

Roman
21.03.2017
07:56:09

Igor
21.03.2017
07:57:09

Roman
21.03.2017
07:57:59
DO IT ?
надеюсь это шутка? или вы так реально делаете чтобы нулабилити побороть?
=)

Igor
21.03.2017
07:58:17
а если у меня нет Empty?
А вообще это вопрос, почему у тебя зависимость на какой-то сервис разрешается не в конструкторе и может меняться.

Dmitry
21.03.2017
07:59:23
uncle Bob тоже по этому сокрушается https://habrahabr.ru/post/324122/
Сколько кода мне придется изменить, когда я наконец узнаю, что кто-то действительно должен вернуть null в древе вызовов?
Все эти ограничения, налагаемые этими языками, предполагают, что программист обладает совершенным знанием системы, до того как начать писать её.
Тут не понял его аргумент, т.е. если у меня в языке нету такой проверки на уровне компиляции, (Java) и я вдруг решил где-то кинуть null, то переделывать код не нужно, все само разрулится что ли? ?
В статье он говорит про тесты, они покажут что код упал - ок. Но от этого разве как-нибудь измениться объем работ по адаптации кода? Т.е. и так и так тебе нужно или совершенное знание системы до разработки или же адаптация к изменениям.

Quantum Harmonizer
21.03.2017
08:00:30

Roman
21.03.2017
08:00:34


Igor
21.03.2017
08:01:32
Сколько кода мне придется изменить, когда я наконец узнаю, что кто-то действительно должен вернуть null в древе вызовов?
Все эти ограничения, налагаемые этими языками, предполагают, что программист обладает совершенным знанием системы, до того как начать писать её.
Тут не понял его аргумент, т.е. если у меня в языке нету такой проверки на уровне компиляции, (Java) и я вдруг решил где-то кинуть null, то переделывать код не нужно, все само разрулится что ли? ?
В статье он говорит про тесты, они покажут что код упал - ок. Но от этого разве как-нибудь измениться объем работ по адаптации кода? Т.е. и так и так тебе нужно или совершенное знание системы до разработки или же адаптация к изменениям.
Меня др заинтересовало - не уж то в Swift есть checked excpetion?
Я всегда думал что это было ошибка java (по этому их не было в др JVM языках).


Roman
21.03.2017
08:01:56
мб оно там не так уж плохо реализовано как боб пишет, не знаю
его аргументы очень уж однобоки (это по котлину видно)

Igor
21.03.2017
08:03:47

Roman
21.03.2017
08:04:47
Сколько кода мне придется изменить, когда я наконец узнаю, что кто-то действительно должен вернуть null в древе вызовов?
Все эти ограничения, налагаемые этими языками, предполагают, что программист обладает совершенным знанием системы, до того как начать писать её.
Тут не понял его аргумент, т.е. если у меня в языке нету такой проверки на уровне компиляции, (Java) и я вдруг решил где-то кинуть null, то переделывать код не нужно, все само разрулится что ли? ?
В статье он говорит про тесты, они покажут что код упал - ок. Но от этого разве как-нибудь измениться объем работ по адаптации кода? Т.е. и так и так тебе нужно или совершенное знание системы до разработки или же адаптация к изменениям.
+1

Google

Quantum Harmonizer
21.03.2017
08:08:37
Наверное там все скоро перейдут на Either (аля скала/и др функ языки)
Выглядит говновато, как обработка ошибок в Си: я вам верну результат или errno/errstr.
Я использовал either в ситауции, когда в одном месте могут оказаться объекты двух разных типов. Например, ВКонтакте есть сообщения сообществ, следовательно, автор сообщения — пользователь или группа: Either<User, Group>.

Igor
21.03.2017
08:09:13

Roman
21.03.2017
08:10:00

Quantum Harmonizer
21.03.2017
08:10:03

Roman
21.03.2017
08:11:15
?.
блин, точно же. до сих пор не могу перестроиться и не вижу таких простых вариантов =))

Igor
21.03.2017
08:11:46

Roman
21.03.2017
08:12:29


Quantum Harmonizer
21.03.2017
08:12:32
Для этого же есть sealed
Ну и такой подход
sealed class MessageAuthor {
class User : MessageAuthor()
class Group : MessageAuthor()
}
свяжет группу и пользователя по признаку авторства сообщения, что мне кажется довольно ужасным (сильное связывание).
а какой способ возврата ошибок ты считаешь более красивым?
На самом деле, мне не хватает checked exceptions. Когда я лезу в интернет, нужно *обязательно* делать это в try-catch.
В ситуации, когда знаешь, что checked exception вылететь не может, меня бы устроил компактный синтаксис для
} catch (e: IOException) {
throw AssertionError(e)
}
И, конечно, в Java переборщили с Checked exceptions: CloneNotSupportedException, UnsupportedEncodingException должны быть Runtime.
Я бы не хотел, делая несколько последовательных запросов в интернет, проверять возвращаемое значение каждого (either).

Alexey
21.03.2017
08:18:54
rx не решает эту проблему?

Quantum Harmonizer
21.03.2017
08:19:08

Roman
21.03.2017
08:19:14
мне кажется проблема проверяемых исключений в том, что когда пишешь код тебя заставляют обработать исключение, но ты еще не знаешь и не понимаешь что это за исключение и что с ним делать
и вот в этом случае возникает боль

Alexey
21.03.2017
08:19:48

Roman
21.03.2017
08:20:17
то есть проблема не с самим механизмом, а с тем как его использует фреймворк.
rx ведь кстати исключения использует как способ передачи ошибок

Quantum Harmonizer
21.03.2017
08:20:57

Google

Roman
21.03.2017
08:22:39

Quantum Harmonizer
21.03.2017
08:22:43

Roman
21.03.2017
08:22:59
какой здесь толк от checked exceptions?

Quantum Harmonizer
21.03.2017
08:23:45

Roman
21.03.2017
08:24:12
на мой взгляд было бы удобно если бы язык позволял просто описать исключения которые МОЖЕТ кидать метод но не обязывал вызывающую сторону эти исключения обрабатывать

Sergey
21.03.2017
08:24:20
как кстати всякие jackson/gson работают с either и sealed?

Roman
21.03.2017
08:24:36
а в котлине есть either?

Sergey
21.03.2017
08:24:48
нет, но он пишется в 10 строчек

Quantum Harmonizer
21.03.2017
08:25:04

Sergey
21.03.2017
08:25:15
можно Pair заюзать)

Admin
ERROR: S client not available

Igor
21.03.2017
08:26:17

Quantum Harmonizer
21.03.2017
08:26:18

Roman
21.03.2017
08:31:53
я вот кстати подумал, что для nullable не хватает тогого варианта когда изначально свойство может быть null, но перейти из не null в null уже не может. тогда проверки типа
if (value != null)
не будут требовать дополнительного кода
у меня в коде достаточно много именно таких кейсов

Igor
21.03.2017
08:32:29

Quantum Harmonizer
21.03.2017
08:32:37
^^ эти двое в целом ведут себя идентично, только lateinit хранит реальный null, а notNull — делегат.

Alexey
21.03.2017
08:33:24

Roman
21.03.2017
08:36:06

Google

Quantum Harmonizer
21.03.2017
08:36:45

Roman
21.03.2017
08:37:21
то есть это nullable которому null можно присвоить только при изначальной инициализации

Vladimir
21.03.2017
08:38:47
Всем привет, осваиваю котлин на андроиде, сейчас пишу адаптер для recyclerView, кто то может объяснить пожалуйста простыми словами какая разница между строками и какую правильно выбрать ?
1)holder?.item?.text = items[position]
2)holder!!.item.text = items[position]
Как я понимаю во втором варианте если holder null, то всё просто падает

Quantum Harmonizer
21.03.2017
08:39:35

Roman
21.03.2017
08:39:42
да, правильно. в первом варианте код может молча не отработать
зачем кстати нужен Delegates.NotNull если есть lateinit?

Quantum Harmonizer
21.03.2017
08:40:26

Igor
21.03.2017
08:41:40
Тут еще вопрос с чего это он recyclerView вообще null?

Roman
21.03.2017
08:42:17

Vladimir
21.03.2017
08:42:17

Quantum Harmonizer
21.03.2017
08:44:07
Хм. Есть класс, у него должен быть no-arg constructor, которым будет пользоваться фреймворк. Есть пара статических фабрик, которые используют этот конструктор.
Как бы мне так ограничить доступ к конструктору, чтобы из нормального кода использовались только фабрики?

Igor
21.03.2017
08:56:41

Quantum Harmonizer
21.03.2017
08:56:58
Android. Кажется, не скушает.

Igor
21.03.2017
08:57:16

Quantum Harmonizer
21.03.2017
08:58:26
@Deprecated(level = DeprecationLevel.ERROR, message = "for reflective use by Android") constructor() : super()
private constructor(args: Bundle) : super() { arguments = args }

Roman
21.03.2017
09:01:21

Quantum Harmonizer
21.03.2017
09:02:53

Roman
21.03.2017
09:03:21
аа, вон ты какой хитрый, хочешь сразу внутри аргументы внутри конструктора установить.
=)