Ответ вслух Middle Основы языка обновлено

Выражения и операторы в Kotlin

Вопрос

Что значит «в Kotlin почти всё выражение»? Приведи примеры, как это меняет код.

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

В Java if и switch это операторы, а в Kotlin выражения, они возвращают значение.

Что должно прозвучать в ответе

  • `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 ошибок.

Термины по теме