Выражения и операторы в Kotlin
Вопрос
Что значит «в Kotlin почти всё выражение»? Приведи примеры, как это меняет код.
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
`if`, `when`, `try` возвращают значение, тернарник не нужен
`when` как выражение требует полноты, для enum и sealed это проверяет компилятор
`throw` и `return` имеют тип `Nothing`, их можно ставить после `?:`
Функция из одного выражения пишется через `=`
Присваивание не является выражением, в отличие от Java
Что могут спросить следом
- Почему
whenпо sealed-классу безelseполезнее, чем сelse? - Какой тип у
ifбез веткиelse?
Разбор
В Java if и switch это операторы, а в Kotlin выражения, они возвращают значение. Поэтому пишем val max = if (a > b) a else b, тернарный оператор не нужен. try тоже выражение: val n = try { s.toInt() } catch (e: Exception) { 0 }. when как выражение обязан быть полным, и для enum и sealed-иерархий компилятор это проверяет сам: добавил новый подкласс, и все неполные when перестали компилироваться. throw и return тоже выражения типа Nothing, поэтому работает val name = user?.name ?: return. Функцию из одного выражения можно записать через знак равенства. Обратное отличие: присваивание в Kotlin не выражение, if (x = 5) не скомпилируется, и это защищает от классической ошибки.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.