Что делают знаки вопроса в коде
Есть строка язык Kotlin
val currentindex = saveinstateState?.getInt(KEY_INDEX,0) ?: 0
Подскажите пожалуйста как работают эти два знака вопроса? знаю что это типа условия, но не пойму логики. Или подскажите где можно про них можно почитать. Я просто не знаю как такие условия называются.
Ответы (1 шт):
Знак вопроса перед вызовом свойства или метода (перед точкой) в Kotlin означает выполнение проверки на null. То есть код
val currentindex = saveinstateState?.getInt(KEY_INDEX, 0)
Эквивалентен следующему:
val currentindex = if(saveinstateState == null || saveinstateState.getInt(KEY_INDEX, 0) == null)
null
else saveinstateState.getInt(KEY_INDEX, 0)
Знак вопроса с двоеточием является элвис-оператором.
Элвис-оператор сначала проверяет значение в левой части выражения. Если это значение отлично от null, Элвис-оператор возращает его, но если в левой части равно null, то возвращает то что в правой
Проще всего его понять на примере. Если взять Ваш код полностью (вместе с элвис оператором):
val currentindex = saveinstateState?.getInt(KEY_INDEX, 0) ?: 0
То и эквивалентный код через if немного изменится:
val currentindex = if(saveinstateState == null || saveinstateState.getInt(KEY_INDEX, 0) == null)
0 // Вот здесь разница, без элвиса был бы null
else saveinstateState.getInt(KEY_INDEX, 0)
Просто забавный факт, позволяющий чуть легче запомнить название элвис-оператора:
Название «Оператор Элвиса» относится к тому факту, что когда его обычное обозначение,
?:, рассматривается сбоку, оно напоминает смайлик Элвиса Пресли с его специфической прической quiff