Введение
Условные операторы — это одни из важнейших управляющих конструкций в любом языке программирования. Мы используем их для определения поведения выполнения при определенном условии. В Javascript, условные блоки могут быть построены с использованием if, else if, else, и switch операторов.
Оператор switch делает управляющий поток простым для чтения, принимая решение на основе возможных результатов выражения. В зависимости от подходящего варианта использования может быть выполнен один или несколько блоков кода. Управление switch аналогично оператору else if. Однако switch более читаем с точки зрения синтаксиса. Он также идеально подходит для сценариев с множеством возможных результатов.
В этом руководстве мы сосредоточимся на операторе switch в Javascript и применим его для построения сложных управляющих структур. Мы также узнаем, как использовать операторы break , case, и default внутри блока switch для направления потока управления.
Использование оператора Switch
Оператор switch работает путем сравнения значения переменной с возможными выражениями. Затем он выполняет блок кода, соответствующий результату. Синтаксис оператора switch ничем не отличается от оператора if. Короче говоря, синтаксис оператора switch записывается следующим образом:
|
1 2 |
switch() { } |
Ниже приведен пример оператора switch. Он имеет два случая (case) или два возможных исхода, а также резервный вариант, задаваемый ключевым словом default. Этот резервный вариант выполняется по завершении выполнения или когда не найдено ни одного подходящего случая:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
switch (expression) { case x: // этот блок кода выполняется, когда выражение соответствует case x break; case y: // этот блок кода выполняется, когда выражение соответствует case y break; default: // блок по умолчанию } |
Приведенный выше код выполняется следующим образом:
-
Сначала вычисляется выражение.
-
Затем результат выражения сопоставляется с case x. Если значение совпадает, блок кода под case x выполняется.
-
Если выражение не совпадает с case x, то сопоставляется case y. Если совпадение найдено, то блок кода case y выполняется.
-
Наконец, если ни case x ни case y не совпали, то код default выполняется, и управление выходит из блока switch .
Рабочий пример
Чтобы понять работу оператора switch, давайте рассмотрим рабочий пример. Мы будем извлекать значение дня недели для текущей даты, используя метод getDay() объекта Date в Javascript. Это значение представляет собой число, для воскресенья и вплоть до 6 для субботы. Мы сопоставим его со значениями, чтобы определить, какой это день недели:
|
1 |
const day = new Date().getDay(); |
Затем мы передадим это значение в оператор switch. Оператор switch будет выполняться сверху вниз для сопоставления со случаями (cases), чтобы определить день недели. Как только совпадение будет найдено, команда break остановит выполнение блока switch от дальнейшего вычисления выражений:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
// Записать текущий день недели в переменную, где 0 — воскресенье, а 6 — суббота const day = new Date().getDay(); switch (day) { case 0: console.log("Сегодня воскресенье"); break; case 1: console.log("Сегодня понедельник!"); break; case 2: console.log("Сегодня вторник."); break; case 3: console.log("Уже среда!"); break; case 4: console.log("Сегодня четверг"); break; case 5: console.log("Счастливой пятницы!"); break; case 6: console.log("Сегодня суббота!"); break; default: console.log("Совпадений не найдено") } |
В зависимости от значения, возвращаемого методом getDate(), оно будет последовательно проверяться на соответствие условиям (cases), начиная сверху. Результат будет отличаться в зависимости от дня, в который вы запустили код. Блок кода по умолчанию (default) добавлен для обработки сценария, когда ни одно условие не подошло. Однако в данном коде default никогда не будет вызван, так как количество дней недели ограничено.
Инструкция break гарантирует, что как только совпадение найдено, дальнейшие проверки не выполняются, и управление выходит из конструкции switch . Это делает программу более эффективной и быстрой.
Проверка диапазонов значений в Switch
До сих пор мы рассматривали очень простые примеры использования. Но иногда возникает необходимость проверить диапазон значений, а не одно конкретное значение. Мы можем сделать это, установив наше выражение в true и выполняя операцию внутри каждой инструкции case .
Давайте продемонстрируем этот случай на примере. Мы возьмем число и преобразуем его в оценку, используя следующую классификацию:
-
Оценка от 90 и выше — это A
-
Оценка от 80 до 89 — это B
-
Оценка от 70 до 79 — это C
-
Оценка от 60 до 69 — это D
-
Оценка 59 и ниже — это F
Мы запишем эти инструкции в виде конструкции switch . Ниже приведен код для этого:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
// Оценка студента const grade = 87; switch (true) { // Если оценка 90 или выше case grade >= 90: console.log("A"); break; // Если оценка 80 или выше case grade >= 80: console.log("B"); break; // Если оценка 70 или выше case grade >= 70: console.log("C"); break; // Если оценка 60 или выше case grade >= 60: console.log("D"); break; // Все, что 59 или ниже — неудовлетворительно default: console.log("F"); } |
В отличие от приведенных выше примеров кода, здесь мы установили выражение в круглых скобках как true. Следовательно, какая бы инструкция case ни соответствовала значению true, она будет выполнена. Точно так же, как и инструкция else if, будет выполнена первая инструкция, соответствующая указанному значению. Здесь результатом будет B, несмотря на то, что даже C и D также соответствуют выражению.
Несколько вариантов case
Если вы хотите использовать несколько вариантов case с одним и тем же блоком кода, это также возможно. Это аналогично условию или в инструкции if. В таких сценариях мы можем указать более одного варианта case для каждого блока кода.
Чтобы проиллюстрировать эту концепцию, мы приведем пример с месяцами года. Мы распределим эти месяцы по временам года. Сначала мы воспользуемся новым методом Date(), чтобы найти число, соответствующее текущему месяцу, и присвоить его переменной month. Метод Date().getMonth() возвращает число от 0 до 11, где 0 соответствует январю, а 11 — декабрю.
Мы проведем категоризацию, используя следующую спецификацию:
-
Зима: январь, февраль и март
-
Весна: апрель, май и июнь
-
Лето: июль, август и сентябрь
-
Осень: октябрь, ноябрь и декабрь
Вот как будет выглядеть код:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
const month = new Date().getMonth(); switch (month) { // Январь, февраль, март case 0: case 1: case 2: console.log("Winter"); break; // Апрель, май, июнь case 3: case 4: case 5: console.log("Spring"); break; // Июль, август, сентябрь case 6: case 7: case 8: console.log("Summer"); break; // Октябрь, ноябрь, декабрь case 9: case 10: case 11: console.log("Autumn"); break; default: console.log("Something went wrong."); } |
При выполнении приведенного выше кода в консоли будет выведено название времени года в зависимости от месяца.
Заключение
В этом руководстве мы продемонстрировали, как использовать инструкцию switch в приложениях JavaScript. Мы также применили инструкцию switch к диапазону значений и нескольким вариантам case вместе с ключевым словом default. Если вы хотите узнать больше о JavaScript, вы можете ознакомиться со следующими руководствами:
- Работа с JavaScript: что такое объекты?
- JavaScript: руководство по индексации, разделению и манипулированию строками
- Работа с JavaScript: как работают классы
Приятного программирования!
Комментарии
Комментариев пока нет. Будьте первым.