Конструкция when в Kotlin является гибкой заменой оператора switch в других языках. Она позволяет сопоставлять значение с различными ветками (conditions) и выполнять соответствующий блок кода. when может использоваться либо как выражение (возвращает значение последней строки выполненной ветки), либо как оператор (просто выполняет код).
Основные возможности:
Сопоставление константных значений: Проверка на равенство с литералами, константами или другими неизменяемыми значениями.
kotlin
Сопоставление по типам (is, !is): Проверка, является ли объект экземпляром определенного типа (или не является им). В случае успешного сопоставления, переменная в ветке автоматически приводится к указанному типу (смарт-каст).
Сопоставление по диапазонам и коллекциям (in, !in): Проверка, находится ли значение в заданном диапазоне или коллекции.
kotlin
Несколько условий в одной ветке: Несколько выражений могут быть объединены запятыми в одной ветке. Если хотя бы одно из выражений истинно, ветка выполняется.
kotlin
Использование произвольных выражений: Каждая ветка может содержать произвольное булево выражение.
kotlin
В этом случае when используется без аргумента. Условия веток вычисляются последовательно до тех пор, пока одно из них не станет истинным.
Ветка else: Ветку else следует использовать для обработки всех остальных случаев, которые не были покрыты предыдущими ветками. Она обязательна, если when используется как выражение, и компилятор не может доказать, что все возможные случаи были обработаны.
Порядок выполнения: Ветки проверяются последовательно сверху вниз. Как только найдена первая соответствующая ветка, ее код выполняется, и when завершает работу (или возвращает значение).
Конструкция when более выразительна и безопасна по сравнению с традиционным switch, так как поддерживает более сложные условия и требует обработки всех возможных случаев (или использования else), что предотвращает потенциальные ошибки.