December 10, 2019

Знакомство с 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 выведите игроку информацию о том, сколько очков опыта он заработал.