
Dmitriy
07.12.2016
12:42:19
Что то я не пойму тогда как такое в котлине решается) Есть вот Объект в нем есть поля: имя, дата, доп параметръ
Доп параметра может не быть а может быть) ЧТо тут спроектировано не правильно?)
вот с let надо глянуть почитать

Глеб
07.12.2016
12:43:41
Так ведь let - одна из основных фишек

Google

Глеб
07.12.2016
12:43:53
главное не улететь в it-hell

Dmitriy
07.12.2016
12:43:59
Там полно фишек) Но все сразу в голову не улеглось)
Этот it хелл это ппц

Глеб
07.12.2016
12:44:23
когда model?.let { it.field?.let{ ...

Dmitriy
07.12.2016
12:44:55
Вот поэтому мне было проще через !! чем черезе эти it

balolam
07.12.2016
12:45:13

Dmitriy
07.12.2016
12:45:14
хоть it можно и переименовать но все равно это ппц
поздняя инициализация я знаю но бывают ситуации когда именно может быть null пример я привел выше

balolam
07.12.2016
12:46:02
let)

Dmitriy
07.12.2016
12:47:04
а если как тут цепочка из 5-7-10 то это будет it it it it it it it it it it.................. так наверное красивее и читабельнее и лучше)

Глеб
07.12.2016
12:47:49
такого не должно случиться
ладно на одном уровне вложенности есть неопределенность null/не-null, но чтоб на 2/3/4 и далее - явно признак того, что что-то не так

Google

balolam
07.12.2016
12:48:40
+ есть apply

Dmitriy
07.12.2016
12:48:47
The !! Operator
The third option is for NPE-lovers. We can write b!!, and this will return a non-null value of b (e.g., a String in our example) or throw an NPE if b is null:
val l = b!!.length
Thus, if you want an NPE, you can have it, but you have to ask for it explicitly, and it does not appear out of the blue.

balolam
07.12.2016
12:48:55
inline fun <T, R> T?.ifNotNull(block: (T) -> R): R? {
return block(this ?: return null)
}

Dmitriy
07.12.2016
12:48:59
в доках не запрещено

Глеб
07.12.2016
12:49:19
ну, как-бы это сказать
если ты пишешь !!
значит уверен, что там не null

balolam
07.12.2016
12:49:41
в доках не запрещено
Но тогда в чем смысл Kotlin использовать. Ты пишешь как на Java, это как купить iPad, что бы использовтаь его вместо доски для нарезки зелени

Глеб
07.12.2016
12:49:57
если уверен, что там не null - пойди и гарантируй это в параметрах метода.

Dmitriy
07.12.2016
12:50:30
Ок будем пробовать перестраиваться)
Спасибо за наводки)

Глеб
07.12.2016
12:51:01
ну и лично я стараюсь избегать складирования всего подряд в состояния
типа a = 10; doSomethingATimes();
тогда ситуации, в которых не ясно null/не-null возникают куда реже

balolam
07.12.2016
12:52:09
Поверь, тут просто кажется что нельзя без "!!", потому что ты не перестроился, нужно в принципе иначе писать. Пишу проект сейчас на kotlin и не ни единого "!!"

Глеб
07.12.2016
12:52:10
если коротко - чистые функции рулят :)
+, !! сделано специально, чтобы ПРЯМ КРИЧАТЬ на опасные места в коде
!ОПАСНОСТЬ!
вот как они расшифровываются

Google

Dmitriy
07.12.2016
12:54:43
вот счяс переписал строку где было !! с этим
но в конце теперь говорит что должен быть Int а приходит Int?

Глеб
07.12.2016
12:55:24
вооот
идешь уровнем выше
и смотришь как так получилось, что приходит то-ли Int, то-ли null
и постепенно искореняешь следы стохастического программирования

balolam
07.12.2016
12:56:28

Глеб
07.12.2016
12:57:08
радикал!

Dmitriy
07.12.2016
12:57:48
Ну как можно написать объект хранения состояний модели не изменяемым?

Глеб
07.12.2016
12:58:43
это новый уровень :) Список объектов состояний, каждый из которых копия исходного с измененными параметрами.

balolam
07.12.2016
12:58:46
вот счяс переписал строку где было !! с этим
И да, ты же понимаешь, что написав там !! в случае Null ты получишь NullPointer? Но если ты сейчас можешь сказать: "Да нет, я же отписываюсь от Observsers в каком-нибудь onDestroy(), там точно не будет null", - тогда это только подтверждает, что можно писать так, что бы вообще не использовать !!

Dmitriy
07.12.2016
12:58:51
На каждый чих пересоздавать целиком объект?)

Глеб
07.12.2016
12:59:07
я и говорю - слишком радикально

balolam
07.12.2016
12:59:09

Dmitriy
07.12.2016
13:00:18
Не модель нулл а некоторые параметры могут быть нулл

balolam
07.12.2016
13:00:30
У тебя: "model!!"

Dmitriy
07.12.2016
13:00:59
ViewModel может быть не инитнута

balolam
07.12.2016
13:01:16
Это как?

Dmitriy
07.12.2016
13:01:19
Ну вот у меня окно для которой нечего хранить

balolam
07.12.2016
13:01:57
И тогда у тебя нет модели? Неожиданно

Google

Max
07.12.2016
13:03:20
https://github.com/Azoft/CarouselLayoutManager
Господа, кто нибудь работал с этой замечательной каруселью? Она отлично работает, кроме проблемы с плавностью анимации, в моем сценарии. Дефолтный RecyclerView при этом не лагает

balolam
07.12.2016
13:04:28
И тогда у тебя нет модели? Неожиданно
В смысле, если у тебя есть свойство model - почему оно вообще может быть когда-нибудь null? Если инициализируется сразу пишешь val, не сразу (к примеру через даггер) тогда lateinit var

Dmitriy
07.12.2016
13:05:48
Про отложенную инициализацию я знаю

balolam
07.12.2016
13:06:41
Тем более что Kotlin позволяет это сделать
Я уже и не помню когда у меня приложение падало c NullPointer

Dmitriy
07.12.2016
13:07:38
А если наследуешься от ява класса то как избавится от этого?)

Глеб
07.12.2016
13:08:20
зависит от ситуации

balolam
07.12.2016
13:08:39

Dmitriy
07.12.2016
13:11:15
Immutable это не изменяемость объекта. Это не говорит о том что внутри 100% будут все поля

balolam
07.12.2016
13:12:08

Глеб
07.12.2016
13:13:20
В третий раз стираю сообщение. ОЧЕНЬ непросто объяснить почему !! быть не должно и как этого достичь.

Dmitriy
07.12.2016
13:14:01
Вот больше интересует как этого достичь)
Как можно быть уверенным на 100% что все поля придут например)

Глеб
07.12.2016
13:14:49
Для этого ты должен обработать пришедшие модельки

balolam
07.12.2016
13:15:15

Глеб
07.12.2016
13:15:50
собственно, входные данные - единственное место, где может быть null, а из них по коду должно распространяться через ?.let
или типа того, трудновато описать

balolam
07.12.2016
13:16:34

Dmitriy
07.12.2016
13:16:42

Google

balolam
07.12.2016
13:16:54

Dmitriy
07.12.2016
13:17:09
ну нет у кого то доп параметров

balolam
07.12.2016
13:17:11
Значит то откуда приходит - работает странно

Dmitriy
07.12.2016
13:17:16
Есть поле а оно пустое

Глеб
07.12.2016
13:17:23
да нет, нормально работает
ок

balolam
07.12.2016
13:17:36
ну доп параметр - это исключение ис правил, мы же говорим об общей картине

Dmitriy
07.12.2016
13:17:41
Чем странно? вот отрубят палец человеку и придет вместо 10 только 9 что странного?

Глеб
07.12.2016
13:17:46
живой пример - есть объект. Иногда у него могут быть данные о геолокации, иногда могут не быть
к примеру фото

balolam
07.12.2016
13:18:00
Если ты работаешь с Api - оно документировано, и если не вернет что нужно - проблема Api и решать это нужно там

Глеб
07.12.2016
13:18:09
теперь у тебя есть 2 метода
первый отображает фото
ему плевать на данные о геолокации
второй отображает место, где оно сделано
photo.geo?.let{ showMap(it) }

balolam
07.12.2016
13:18:49

Dmitriy
07.12.2016
13:19:00

Глеб
07.12.2016
13:19:04
В основном будет ещё не такая

Dmitriy
07.12.2016
13:19:08

Глеб
07.12.2016
13:19:15
так вот
теперь внимание