Оператор when
Содержание
- 1. Оператор when. Назначение. Синтаксис объявления
- 2. Использование оператора when с различными объектами. Примеры
- 2.1. Определение названия дня недели
- 2.2. Определение времени года по названию месяца. Групповая обработка в операторе when
- 2.3. Оператор when без аргументов. Использование оператора when как составляющей условного выражения. Пример
- 2.4. Пример. Использование сложных выражений в операторе when
- 2.5. Использование строкового типа в качестве аргумента
- Связанные темы
Поиск на других ресурсах:
1. Оператор when. Назначение. Синтаксис объявления
Оператор when используется для реализации выбора одного варианта из нескольких. Оператор when в языке Kotlin является аналогом оператора switch в языках Java, C#, C/C ++ только с более широкими возможностями. Оператор when позволяет оперировать произвольными объектами в отличие от оператора switch других языков, в котором использовались только константы.
Оператор when эффективен, когда количество вариантов (проверок условий) составляет три и более.
Синтаксис объявления оператора when разнообразен и в наиболее общем случае имеет следующий вид
when (name) { value1 -> statements_1 value2 -> statements_2 ... valueN -> statements_N else -> statements_N+1 }
здесь
- name — имя аргумента, который определяет перечень возможных значений value1, value2, …, valueN;
- value1, value2, valueN — значения, которые получает переменная (ссылка) name. Эти значения могут быть отдельными литералами, интервалами, переменными. Также допускается вставлять вызовы функций, которые возвращают значение такого же типа который имеет переменная name;
- statement_1, statement_2, statement_N — один или несколько операторов, которые нужно выполнить если найдено совпадение name соответственно с value1, value2, valueN. Если нужно выполнить два и более операторов, то они берутся в фигурные скобки { };
- statement_N+1 — один или более операторов, которые выполняются в случае, когда не найдено ни одного совпадения между name и value1, value2, valueN.
Оператор when работает следующим образом. Сначала сравнивается значение name со значением value1. Если значения совпадают (равны), то выполняется оператор (блок операторов) statement1 и дальше происходит переход к следующему оператору, следующему после оператора when. Если значение name и value1 не совпадают, то рассматривается значение value2, которому соответствует оператор (несколько операторов) statement2.
Если в ходе проверок на равенство не найдено совпадений для N значений, то выполняется оператор statement_N+1.
⇑
2. Использование оператора when с различными объектами. Примеры
2.1. Определение названия дня недели
Задача. Задан номер дня недели (1..7). По этому номеру вывести название дня недели. Считать, что понедельник имеет номер 1.
Решение.
fun main(args:Array<String>) { val day : Int print("day = ") day = readLine().toString().toInt() when (day) { 1 -> println("Monday") 2 -> println("Tuesday") 3 -> println("Wednesday") 4 -> println("Thirsday") 5 -> println("Friday") 6 -> println("Saturday") 7 -> println("Sunday") else -> println("Incorrect input.") } }
Тестовый пример
day = 3 Wednesday
⇑
2.2. Определение времени года по названию месяца. Групповая обработка в операторе when
В примере показано, что оператор when можно применять к группе элементов и диапазонов.
Задача. По введенному номеру месяца вывести название времени года, к которому этот месяц относится.
Решение.
fun main(args:Array<String>) { // 1. Объявить переменные val month : Int // 2. Ввести номер месяца print("month = ") month = readLine().toString().toInt() // 3. Вычисление. Вывести название времени года when (month) { 1, 2, 12 -> println("Winter") in 3..5 -> println("Spring") // указывается диапазон in 6..8 -> println("Summer") in 9..11 -> println("Autumn") else -> println("Incorrect input.") } }
Тестовый пример
month = 6 Summer
⇑
2.3. Оператор when без аргументов. Использование оператора when как составляющей условного выражения. Пример
Оператор when может быть использован без аргументов. В нижеследующем примере используется оператор when без аргументов, который является частью условного выражения.
Пример. Разработать программу, которая определяет, высокосный год или нет.
fun main(args:Array<String>) { // Оператор when без аргументов. Определение высокосного года // 1. Объявить переменные val year : Int // 2. Ввести год print("year = ") year = readLine().toString().toInt() // 3. Проверка на корректность ввода if (year < 0) { println("Incorrect input.") return } // 4. Вычисление // Условнове выражение + оператор when val leap_year : Boolean = when { year % 400 == 0 -> true year % 100 == 0 -> false year % 4 == 0 -> true else -> false } // 5. Вывести результат if (leap_year) println("Leap year") else println("Not a leap year") }
Тестовый пример
year = 998400 Leap year
⇑
2.4. Пример. Использование сложных выражений в операторе when
Задача. С начала 1990 года по некоторый день прошло n месяцев и 2 дня. Определить название месяца этого дня (январь, февраль и т.д.).
Решение.
Поскольку в условии задачи сказано «C начала 1990 года …», то это означает, что будет 1 января 1990. В соответствии с этим решается задача.
fun main(args:Array<String>) { // Оператор when. Определение месяца в году // 1. Объявить переменные val n : Int // 2. Ввести количество месяцев n print("n = ") n = readLine().toString().toInt() // 3. Проверка на корректность ввода if (n < 0) { println("Incorrect input.") return } // 4. Вычисление // Условное выражение, аргументом есть выражение val month = when (n % 12) { 0 -> println("January") 1 -> println("February") 2 -> println("March") 3 -> println("April") 4 -> println("May") 5 -> println("June") 6 -> println("July") 7 -> println("August") 8 -> println("September") 9 -> println("October") 10 -> println("December") 11 -> println("November") else -> println("Incorrect input.") } }
Тестовый пример
n = 3 April
⇑
2.5. Использование строкового типа в качестве аргумента
Задача. Задано полные названия дней недели, которые начинаются с большой буквы. Определить их порядковый номер. Считать, что понедельник имеет номер 1.
Решение.
fun main(args:Array<String>) { // Оператор when. Аргументом выступает тип String // 1. Объявить переменные val day : String // 2. Ввести название дня недели print("day = ") day = readLine().toString() // 3. Вычисление // Оператор when, аргументом есть тип String val num_day = when(day){ "Monday" -> 1 "Tuesday" -> 2 "Wednesday" -> 3 "Thirsday" -> 4 "Friday" -> 5 "Saturday" -> 6 "Sunday" -> 7 else -> "Incorrect input." } // 4. Вывод номера дня println("num_day = " + num_day) }
Тестовый пример
day = Thirsday num_day = 4
⇑
Связанные темы
- Оператор условного перехода if-else. Виды операторов условного перехода
- Вложенные операторы условного перехода. Оператор условия if как составляющая других операторов
- Условное выражение. Особенности использования с операторами if, when. Примеры
⇑