Size: a a a

Kotlin Community

2020 February 13

IN

Ilya Nikolaev in Kotlin Community
да я понял .
источник

SB

Sergey Barmin in Kotlin Community
Alexey Otts
Так как это разные юниты компиляции, никто не мешает в следующей версии этому полю стать var
а есть какой-нибудь флаг компилятора, чтоб ему сказать "да я верю этому модулю, братан, падай в рантайме если что", вместо оператора "мамой клянусь" !! ?
источник

SB

Sergey Barmin in Kotlin Community
а то правда напрягает периодически что это val, я сам автор второго модуля, подгружаю его конкретную версию, но смарткаста после проверки поля на null не происходит. Насчет того что он станет var в другой версии модуля там будет уже проверка именно на var , а не на модульность же
источник

AO

Alexey Otts in Kotlin Community
Я просто всегда делаю через ?.let
источник

BP

Bogdan Panchenko in Kotlin Community
Vladimir Petrakovich
Потому что нет гарантий, что значение не изменится на null после проверки
Да вроде не вар
источник

SB

Sergey Barmin in Kotlin Community
Alexey Otts
Я просто всегда делаю через ?.let
итого человеческий  if (smth != null) else превратится в ?.let {} ?: , вроде и не особо плохо, но конструкция менее очевидная
источник

AL

Alexander Levin in Kotlin Community
Bogdan Panchenko
Да вроде не вар
Computable property тоже никто не отменял :)
источник

AO

Alexey Otts in Kotlin Community
Sergey Barmin
итого человеческий  if (smth != null) else превратится в ?.let {} ?: , вроде и не особо плохо, но конструкция менее очевидная
вай соу?
источник

VP

Vladimir Petrakovich in Kotlin Community
Sergey Barmin
а есть какой-нибудь флаг компилятора, чтоб ему сказать "да я верю этому модулю, братан, падай в рантайме если что", вместо оператора "мамой клянусь" !! ?
Это больше на контракт похоже
"Да не буду я возвращать null, если сейчас не null"
источник

VP

Vladimir Petrakovich in Kotlin Community
Может, запилят когда-нибудь
источник

SB

Sergey Barmin in Kotlin Community
Alexey Otts
вай соу?
ну потому что условия могут быть не просто проверка на нулл, а какая-нибудь комбинируемая логика, или несколько нон-нулл проверок
источник

BP

Bogdan Panchenko in Kotlin Community
Функция + контракт, Правда они пока ограниченные
источник

AO

Alexey Otts in Kotlin Community
Sergey Barmin
ну потому что условия могут быть не просто проверка на нулл, а какая-нибудь комбинируемая логика, или несколько нон-нулл проверок
Ну вот без нескольких проверок можно как то так
foo.bar
 ?.takeIf { for.baz == "kek" }
 ?.let { bar -> doSomeShit(bar) }
 ?: doOtherShit()
источник

AO

Alexey Otts in Kotlin Community
С двумя != null конечно сложнее, но тоже можно вывернуться
источник

SB

Sergey Barmin in Kotlin Community
Alexey Otts
С двумя != null конечно сложнее, но тоже можно вывернуться
ну вот в том и дело, что вывернуться) я не против подобного стиля, но где можно написать вполне себе явный if-else, почему бы этого не сделать
а с этой проверкой приходится ставить везде !! дальше
источник

IN

Ilya Nikolaev in Kotlin Community
Sergey Barmin
а то правда напрягает периодически что это val, я сам автор второго модуля, подгружаю его конкретную версию, но смарткаста после проверки поля на null не происходит. Насчет того что он станет var в другой версии модуля там будет уже проверка именно на var , а не на модульность же
Так это штука не от чего не защищает.) Если у тебя зависимость от второго модуля и 1 модуль обновили , а твой нет и там были изменения этого поля, то все равно сломается все.
источник

IN

Ilya Nikolaev in Kotlin Community
если модули jar
источник

АО

Алексей Овсянников in Kotlin Community
Sergey Barmin
а то правда напрягает периодически что это val, я сам автор второго модуля, подгружаю его конкретную версию, но смарткаста после проверки поля на null не происходит. Насчет того что он станет var в другой версии модуля там будет уже проверка именно на var , а не на модульность же
val - property, а не переменная, а значит между вызовами соседних строк может произойти что угодно
источник

АО

Алексей Овсянников in Kotlin Community
В общем-то, всё логично
источник

SB

Sergey Barmin in Kotlin Community
Алексей Овсянников
val - property, а не переменная, а значит между вызовами соседних строк может произойти что угодно
не понял посыла
источник