Знакомство с switch
Всем привет! Сегодня расскажу о продвинутом операторе if, а именно о конструкции switch.
if и switch очень близки по своей идее, однако, в множестве случаев в споре кто лучше тот или другой, победителем выйдет, именно, switch.
Теперь поподробнее об этой конструкции. switch, фактически заменяет в коде несколько конструкций if, что, порой, позволяет избегать лишних проверок(соответственно, сокращать код).
Вся конструкция switch выглядит следующим образом:
switch(arg) {
case 1:
//действия
break;
case 2:
//действия
break;
default:
//действия
}
Теперь сразу же разберем на примере:
let arg = 5;
switch(arg) {
case 1:
alert(‘Значение переменной arg равно 1’);
break;
case 3:
alert(‘Значение переменной arg равно 3’);
break;
case 5:
alert(‘Значение переменной arg равно 5’);
break;
default:
alert(‘Значение переменной arg равно: ’ + arg);
}Разберем, что тут происходит (живой пример).
Мы определили переменную arg и записали в нее значение 5.
Затем, эту переменную arg мы как бы “скармливаем” конструкции switch.
Эта конструкция берет значение переменной, которую ей "скормили", и проверяет совпадает ли это значение с одним из значений указанных в блоках case. Если значение совпадает с каким-либо значением указанным после ключевого слова case, то выполнятся все действия, которые указаны внутри этого блока case до оператора break. Опертор break говорит JS-у, что нужно выйти из конструкции switch.
Т.к., значение переменной arg равно 5, то выполнится код, который написан внутри последнего блока case, т.е. этот:
alert(‘Значение переменной arg равно 5’);
Блок default, который находится внизу конструкции switch является необязательным. Служит этот блок для того, чтобы код внутри него выполнился в том случае, если значение переменной скормленной в switch не совпало ни с одним значением указанных в блоках case.
Т.е, если сейчас взять и поменять значение переменной arg, например, на 6(в примере выше), то отработает блок default.
Важные заметки:
switch очень любит точность от программиста. Поэтому, если ты пишешь так:
... case 3: ...
то это означает, что ты ожидаешь от переменной именно числового значения 3, а не строки '3'. switch просто не будет отрабатывать так, как ты ожидаешь, если ты забьешь на типы данных при сравнении.
Второй момент: кроме того, что блок default является необязательным, в конце этого блока можно не писать оператор break, т.к. этот код находится в конце конструкции switch, а значит JS так или-иначе выйдет из этой конструкции.
Домашняя работа
Написать конструкцию switch, которая будет проверять сколько опыта получил ваш герой в игре, в зависимости от количества убитых врагов.
Условия задачи:
- За 1 врага ему начисляется 100 очков опыта
- За 3 врагов ему начисляется 400 очков
- За 5 врагов начисляется 700 очков
- За 10 врагов начисляется 1000 очков
Если же он набрал другое количество очков, то умножай количество убитых врагов на 100 очков.
Запроси(с помощью prompt), сколько игрок убил врагов, а потом с помощью alert выведите игроку информацию о том, сколько очков опыта он заработал.