Size: a a a

Kotlin Community

2020 February 13

АО

Алексей Овсянников in Kotlin Community
Пардон, я на другую тему
источник

АО

Алексей Овсянников in Kotlin Community
Там выше вопрос был, почему val поле в классе не выводится как not null после проверки
источник

SB

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

АО

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

AL

Alexander Levin in Kotlin Community
Sergey Barmin
ну, верно, val неизменяемая пропертя, что там может произойти после ее проверки? что-то что не может произойти в рамках одного модуля
Не утверждение, но вопрос - а между модулями прокидывается информация о типе проперти? Ну, что это просто обычный геттер с backing field без сложной логики, а не computable property?
источник

IN

Ilya Nikolaev in Kotlin Community
Алексей Овсянников
Неизменяемая извне
а внутри что вал может себя изменить ?
источник

SB

Sergey Barmin in Kotlin Community
Алексей Овсянников
Неизменяемая извне
Покажите на примере, я не понимаю что вы имеете в виду. Обычный котлиновый val в обычном котлиновом классе я не могу изменить после его инициализации.
В 2020.1 кстати они пишут чуть более обоснованную историю на счет этой проверки, что геттер может быть переопределен.
источник

IN

Ilya Nikolaev in Kotlin Community
хотя это же функция
источник

IN

Ilya Nikolaev in Kotlin Community
По сути он не может изменить тип  . Что еще надо то ?) Как он там внутри устроен и какую дату возвращает есть ли разница ?
источник

VP

Vladimir Petrakovich in Kotlin Community
val balanceId: Int? get() = 1.takeIf { rnd.nextDouble() > 0.5 }
источник

VP

Vladimir Petrakovich in Kotlin Community
Вот где гарантия, что в другом модуле завтра обычный val (который на деле обычный метод) не превратится вот в такое?
источник

IN

Ilya Nikolaev in Kotlin Community
Тип поменяется ?
источник

IN

Ilya Nikolaev in Kotlin Community
: Int?
источник

SB

Sergey Barmin in Kotlin Community
нет, тип не поменяется
источник

IN

Ilya Nikolaev in Kotlin Community
Тогда какая разница превратился он в такое или нет со стороны того , кто использует api?
источник

SB

Sergey Barmin in Kotlin Community
но в данном примере после проверки на нулл и в рамках одного  модуля она должна ругаться
источник

АО

Алексей Овсянников in Kotlin Community
Ilya Nikolaev
а внутри что вал может себя изменить ?
Внутри класс может начать возвращать что-то другое
источник

SB

Sergey Barmin in Kotlin Community
Vladimir Petrakovich
val balanceId: Int? get() = 1.takeIf { rnd.nextDouble() > 0.5 }
источник

AL

Alexander Levin in Kotlin Community
Ilya Nikolaev
По сути он не может изменить тип  . Что еще надо то ?) Как он там внутри устроен и какую дату возвращает есть ли разница ?
Формально говоря, разница в том, что смарт касты такая вещь, которая смотрит не только просто на тип. Если просто смотреть на тип - тогда всегда будет возвращаться nullable type, никакого вопроса и нету.
источник

АО

Алексей Овсянников in Kotlin Community
Sergey Barmin
Покажите на примере, я не понимаю что вы имеете в виду. Обычный котлиновый val в обычном котлиновом классе я не могу изменить после его инициализации.
В 2020.1 кстати они пишут чуть более обоснованную историю на счет этой проверки, что геттер может быть переопределен.
class Example {
   val example: String?
       get() = if (randInt() > 50) "it's ok" else null
}
источник