Операторы ветвления в JavaScript
Значительная часть команд в программировании должна выполняться так или по другому в зависимости от целого комплекса обстоятельств.
Для решения этой задачи в JavaScript служат оператор if и switch.
IF (если)
При простейшем использовании, оператор if отделяет от основной программы кусочек, выполняемый только ЕСЛИ будет соблюдено определенное условие. В противном случае он просто будет пропущен.
Синтаксис:
if (выражение) команда
В приведенном примере выражение должно быть логическим. То есть на него должен быть ответ — так это или нет. Например, переменная больше 5 (x>5); строка начинается с буквы "А" и т.п.
Обратите внимание, что выражение заключено в круглые скобки, что означает, что оно должно быть вычислено.
Размещение команды в той же строке позволяет сделать запись очень понятной и компактной.
Но! Такой случай встречается довольно редко. Чаще команда не одна, а несколько и более приемлемой будет следующая запись.
if (выражение) { команда1; команда2; ... }
Как видно, начало и конец блока команд обозначены фигурными скобками, а сами команды сдвинуты вправо (сделан отступ). Это оформление не обязательно, но существенно облегчает чтение текста программы.
Выражение может оценивать не одно, а несколько условий для объединения которых используются логические операторы && (И), || (ИЛИ), ! (НЕ). Тогда каждое условие также заключается в скобки.
if ((x==1) && (y>=2)) alert('x = ' + x + ', a y = ' + y)
Else (иначе)
Как уже сказано выше, очень часто оператор ветвления служит для альтернативного способа работы программы. Чтобы выделить второй вариант, служит инструкция Else.
if (выражение) { блок команд 1; } else { блок команд 2; }
Если логическое выражение истинно, то выполняется первый блок команд. Иначе (ложно) — второй.
Else if (другое если)
Несколько реже возникает ситуация, когда необходимо разветвить программу не на два, а на большее число вариантов.
Для того, чтобы это сделать, можно воспользоваться следующей формой записи.
if (x==0) {
блок команд 1;
}
else if (x==1) {
блок команд 2;
}
else if (x==2) {
блок команд 3;
}
else {
блок команд 4; //То есть x<0 или x>2
}
Будьте внимательны! Когда логическое выражение является составным, может произойти сбой. Связано это с тем, что выражения анализируются последовательно. Как только будет найдено истинное выражение, будет выполнен соответствующий ему блок команд, а дальнейший анализ производится не будет.
В приведенном ниже примере блок команд 2 не исполняется никогда, так как оцениваемое значение всегда будет обнаружено в предыдущем условии (x>3).
if ((x==0) || (x>3)) { блок команд 1; } else if (x==4) { блок команд 2; }
Оператор "?"
Очень часто нужно проанализировать условие и, в зависимости от результата, присвоить переменной то или иное значение. Использование if в этом случае лишь загромождает программу.
Синтаксис:
a = (a>10) ? a/2 : a+1;
То есть, если a>10, то присвоим этой переменной значение, равное её половине, а иначе — увеличим её на единицу.
Во многих языках программирования имеется аналогичная функция iif().
Switch
Использование множественного if оправдано только при оценке сложных условий. Если же анализируется одно и то же, а разветвление зависит только от его значения, менее расточительным будет использование конструкции switch.
Синтаксис:
switch(x) { case 0: //Если x = 0 блок команд 1; break; //Конец блока 1, завершение switch case 1: //Если x = 1 блок команд 2; break; case 2: блок команд 3; default: //Если x совсем другое блок команд 4; break; }
Каждый case завершается командой break, переводящей выполнение в конец всей конструкции switch. Проще говоря, происходит последовательный перебор case. Когда будет найдено значение, описанное в case, выполнится соответствующий блок команд, а анализа последующих case уже не будет. То есть опять возникает ситуация, когда мы можем получить никогда не исполняющийся фрагмент!