Оператор выбора switch case в JavaScript
Условная конструкция или оператор выбора switch case является альтернативой условиям if else. Оператор выбора предоставляет множество вариантов решений при соответствии условию, а также в противоположном случае. У этой конструкции есть свои особенности в синтаксическом плане, а также на стадии выполнения.
Конструкция switch case состоит из следующих составляющих:
- switch(значение любого типа){ — основной оператор и открывающая скобка, где switch определяет значение в скобках;
- case значение: блок или один оператор — в случае, если значение в скобках совпадает со значением case, то выполняется текущий блок операторов;
- case другое значение: блок операторов — если значение в скобках совпадает с этим значением, то будет выполняться этот блок
- default: блок операторов } — если не один case не совпал со значением switch, то будет выполняться этот блок, однако он не обязателен в конструкции и его можно пропустить здесь же закрывается скобка конструкции switch.
Рассмотрим работу switch case на простом примере:
var x = 23;
switch(x){ // проверяем нашу переменную х
case 5: // в случае, если она равна 5 то выведется сообщение wrong value
alert(«Wrong value»);
break;
case 30: // х не равно 30
alert(«Wrong again»);
break;
default: // не одно значение не подошло, поэтому выполнится этот раздел
alert(«no right values»);
}
Запустим этот скрипт и выведется сообщение «no right values». Это доказывает то, что не одно значение case не подошло под значение переменной x. Обратите внимание на оператор break, который стоит в конце каждого case. Он нужен, чтобы выполнялись операторы одного case, значение которого будет соответствовать switch. Если его не ставить, то после нахождения правильного значения выполнятся и остальные операторы нижних case. Вот что будет, если не поставить break.
Пример:
var a = 3;
switch(a){
case 3:
alert(«Right value»);case 10:
alert(«Wrong value»);default:
alert(«all wrong»);
}
Результатом этого кода станет два алерта: Right value и Wrong value. Первый case у нас совпал, поэтому выводится сообщение о том, что значение угадано. Но так как отсутствует break, то выводятся все последующие сообщения конструкции после угаданной. Если бы был везде прописан оператор break, то вывелось бы только «Right value».
Case можно группировать
Группировка case задает два значения для проверки, но оба case выполняют одни и те же операторы. Рассмотрим это на примере.
Пример:
var variable = 5+5
switch (variable) {
case 10:
alert(‘Правильно!’);
break;
case 8: // два сгруппирированных case
case 12:
alert(‘Неправильно!’)
break
default:
alert(‘Не совпало не одно значение’);
}
Выйдет «Правильно!». В случае case 8 и case 12 равносильно тому, что «или 8 или 12», если переменная не соответствует ни одному из этих значений, то будет выведено «Неправильно!». Группировка позволяет экономить время и силы на написания инструкций под каждый case. Но использовать группировку следует только в том случае, если все неправильные case выполняют одни и те же операторы.
Есть ли разница в switch и if else
Разница есть. If Else более гибкая конструкция и позволяет разделять линейный алгоритм на множество ветвей с условиями разных сложностей. switch case более компактная конструкция и чаще используется когда не нужно гибко определять условие. При этом код switch красивее и компактнее. Поэтому, если условие простое, то следует проверять его через switch. IF else позволяет добавлять логические операторы «и, или, не, равно, неравно», что усложняет проверку условия для ветвления алгоритма.
В switch логические операторы не предусмотрены, хотя его конструкцию можно усложнить вложенными if и даже вложенными switch. Но тогда сама конструкция будет похожа на клубок разнообразных операторов, разобраться в которых будет достаточно трудно. Для сложных разветвлений красиво в плане оформления кода будет выглядеть конструкция if else.
Стоит помнить, что в блоке case нужно ставить оператор break и никакой другой. Это позволит предотвратить выполнение операторов остальных case. После case, даже если по списку идет множество операторов, не нужно ставить фигурные скобки, как это предусмотрено в if else.