@android_ru

Страница 639 из 3205
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
чем подменить ?? . просто освоением котлина не так давно занялся
все что не может быть null и инициализируется не сразу можно сделать lateinit

Dmitriy
07.12.2016
12:45:14
хоть it можно и переименовать но все равно это ппц

поздняя инициализация я знаю но бывают ситуации когда именно может быть null пример я привел выше

balolam
07.12.2016
12:46:02
Вот поэтому мне было проще через !! чем черезе эти it
не проще, лучше на java тогда писать. "!!" - костыль, для перехода с джава, мол хочу вызвать метод и если там null то кинь мне NullPointer

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
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
но в конце теперь говорит что должен быть Int а приходит Int?
Суть не в переписыании конкретной строки, нужно приучится писать все Immutable и не понадобятся ни "let" ни "!!")

Глеб
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
Про отложенную инициализацию я знаю
Я просто пытаюсь донести, что использование null опасно, нужно избавлятся от него

Тем более что Kotlin позволяет это сделать

Я уже и не помню когда у меня приложение падало c NullPointer

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

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

balolam
07.12.2016
13:08:39
А если наследуешься от ява класса то как избавится от этого?)
Писать Java класс так же нужно с умом. Я часто использую Immutable - объекты. Согласен, зависит от ситуации)

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

balolam
07.12.2016
13:12:08
Immutable это не изменяемость объекта. Это не говорит о том что внутри 100% будут все поля
Нет, я же не о том, так легче дружить Java + Kotlin. Так же для самоконтроля можно использовать @NotNull or @NonNull

Глеб
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
Как можно быть уверенным на 100% что все поля придут например)
Только если то откуда они придут так же написаны нормально.

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

или типа того, трудновато описать

balolam
07.12.2016
13:16:34
или типа того, трудновато описать
Согласен, нужно прочувствовать и пойдет дальше само

Dmitriy
07.12.2016
13:16:42
Только если то откуда они придут так же написаны нормально.
Ну снова возвращаюсь к примеру Объект: поля : имя, возраст, пармка(которая может придти а может не придти)

Google
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
В основном будет ещё не такая

Глеб
07.12.2016
13:19:15
так вот

теперь внимание

Страница 639 из 3205