Управлять порядком выполнения программы можно с помощью выражения when, которое выполняет разный код в зависимости от значения переменной или константы.

Содержание статьи

Синтаксис выражения when в Kotlin

Далее представлено выражение when, которое применяется на целое число:

Вывод данного примера будет следующим:

Цель выражения when из примера выше в том, что нужно определить, равно ли число нулю или нет. В будущем будут примеры по сложнее — обещаем!

Чтобы обработать конкретный случай, добавляется значение, за которым следует знак ->, который указывает на код, который будет выполняться, если условие выполнено. Затем используется else, чтобы указать, что должно произойти для всех других значений. В отличие от других языков, таких как Java, в Kotlin нет необходимости включать оператор break в каждую ветвь, поскольку выражение when будет выполнять только первую совпадающую ветвь.

Далее дан еще один пример:

На этот раз проверяется если переменная содержит число 10, если это так, то выводится сообщение. Для других значений ничего не должно происходить.

Конечно, выражение when также работает с другими типами данных, не только с целыми числами. Далее дан пример с использованием строк:

Вывод следующий:

В этом примере предоставляются два значения для первого аргумента. Это означает, что если значение будет равно "Кот" или "Собака", тогда оператор when выполнит первую ветвь выражения.

Присвоения значения через when

Выражениям when можно предоставить более одной ветки. Поскольку when является выражением, его можно использовать для возврата значения, как и выражение if. Также можно проигнорировать значение, если нужно просто использовать when в качестве оператора.

Выражение when вернет значение из первой ветви с соответствующим аргументом.

Если вы хотите вывести номер из константы number в текстовом формате, то вы можете присвоить значение с помощью выражения when следующим образом:

В ветке else мы использовали фигурные скобки, чтобы включить в ветвь целый блок кода. Последнее значение в блоке возвращается из ветви, поэтому, если number не было в интервале (2, 4, 6, 8, 10), тогда значением в константе numberName будет "Неизвестный".

Продвинутые выражения when в Kotlin

В одном из прошлых уроках мы работали с if выражением, в котором используется несколько условий else для преобразования времени в строку, описывающую текущею часть дня.

Данную задачу можно переписать лаконично с помощью when выражения. Например:

Код выведет следующее:

Помните интервалы? Что ж, вы можете использовать интервалы, чтобы упростить данное when выражение. Можно переписать приведенный выше код, используя интервалы:

Это более минималистично и элегантно, чем отдельная запись значений для всех ветвей.

Когда есть несколько ветвей, выражение when выполнит первое соответствующее. Так более сжато и понятно, чем использование if выражения для данного примера.

Это также более точно, потому что использования if не обрабатывает отрицательные числа, которые здесь правильно считаются недействительными.

Также можно сопоставить ветвь с условием на основе свойства значения без каких-либо аргументов, передаваемых выражению when.

Является ли целое число четным или нечетным

Для определения является ли целое число четным или нечетным, можно использовать оператор % для нахождения остатка от деления.

Рассмотрим следующий код:

Результат следующий:

Первая ветвь данного when выражения использует оператор ==. Это означает, что аргумент будет совпадать только тогда, когда определенное условие истинно.

В данном примере аргумент был создан таким образом, чтобы он совпадал, если значение четное, то есть если значение остатка после деления на 2 равно 0.

Другой пример более эффективного использования условий в when выражениях:

Что делает каждая из ветвей по порядку:

  1. Выполняется если значения из x, y, z равны (0, 0, 0). Это координаты точки в 3D пространстве;
  2. Выполняется если y = 0, z = 0 и значение x содержит любое другое значение. Это означает, что координата находится на оси x;
  3. Выполняется если x = 0, z = 0 и значение y содержит любое другое значение. Это означает, что координата находится на оси y;
  4. Выполняется если x = 0, y = 0 и значение z содержит любое другое значение. Это означает, что координата находится на оси z;
  5. Выполняется если данные из каждой координаты разные.

Последняя ветвь с условием else используется по умолчанию. Она соответствует чему угодно, потому что нет ограничений ни на одну часть координат. Вот пример более сложного случая:

Здесь сопоставляются строки “y равен x” и “y равен x в квадрате”. Поскольку у выражения when нет аргумента, вам не нужна ветвь else, а выражение when не будет выполнять ветвь, если нет соответствующего условия. Это основы выражений when!

Задания для проверки

Напишите when выражение, которое принимает возраст как целое число и выводит стадию жизни, относящуюся к данному возрасту. Вы можете создать свои этапы жизни или использовать нашу классификацию:

  • 0-2 года Младенец (Infant);
  • 3-12 лет, Ребенок (Child);
  • 13-19 лет, Подросток (Teenager);
  • 20-39, Взрослый (Adult);
  • 40-60 лет, Средний возраст (Middle aged);
  • 61+, Пожилые (Elderly).

Напишите when выражение, которое разбивает тип Pair, содержащую строку и целое число. Строка это имя, а целое число — возраст человека. Используйте те же случаи, которые вы использовали в предыдущем упражнении, чтобы вывести имя, за которым следует этап жизни. Например, "Иван взрослый."

5 7 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
1 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Геннадий
Геннадий
1 год назад

Статью обнаружил случайно во время поиска «формата оператора when языка Kotlin». В ней я нашел все ответы на свой вопрос, за что и благодарен автору статьи… Попробую поискать и почитать его статьи по описанию языка…

1
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x