В прошлый раз мы поговорили про условный оператор, который работает так:
мы проверяем условие, и если оно выполняется, то делаем что-то одно, а если нет — то просто идём дальше (или выполняем что-то другое и тоже идём дальше).
Но это хорошо работает, когда у нас бинарное условие: или выполняется, или нет. А если нам нужно проверить какое-то значение, и если оно равно единице, то сделать что-то одно, двойке — что-то другое и так далее? Тут на помощь приходит оператор множественного выбора, про него и поговорим.
Почему такой выбор сложно сделать с помощью обычного условия
Представим, что нам нужно написать простую программу: мы спрашиваем у пользователя число от 1 до 3 и выводим текстом название этого числа.
Если у нас под рукой только условный оператор, то схема получится такая:
Теперь запишем это на языке JavaScript:
a = 1;
if (a == 1) {
console.log('Один')
} else {
if (a == 2) {
console.log('Два')
} else {
if (a == 3) {
console.log('Три')
}
}
}
Выглядит громоздко. А теперь представим, что нам нужно выбрать не из трёх вариантов, а из десяти или ста — и для каждого выбора нужно выполнить своё действие. У нас получится настолько сложная для понимания и работы конструкция из условных операторов, что быстро сориентироваться в ней не получится.
Чтобы не городить такой огород, как раз используют оператор множественного выбора.
Как устроен оператор множественного выбора
Оператор множественного выбора работает по такой логике:
- У него есть значение, на которое он смотрит, — оно может храниться в переменной или быть результатом работы функции. Что именно используется — неважно, главное, что есть исходные данные, с которыми можно работать.
- У него есть несколько готовых разных значений, к каждому из которых привязан свой вариант действий.
- Если значение совпадает с одним из предложенных — он делает те команды, которые мы прописали для этого значения.
При этом оператор множественного выбора проверяет на совпадения с этими значениями сверху вниз: сначала первый, потом второй — и так до тех пор, пока не найдёт совпадение. Как только нашёл — выполняет нужные команды, прекращает поиск, и программа движется дальше.
Если нарисовать это в виде блок-схемы, получится так:
Кажется, что получилось ещё сложнее, чем в самом начале. Но если мы запишем это в коде, всё будет проще:
a = 1;
switch (a) {
case 1: console.log('Один'); break;
case 2: console.log('Два'); break;
case 3: console.log('Три'); break;
}
Механика в этом примере такая:
- У нас есть переменная «a», в которой лежит какое-то значение.
- Мы говорим компьютеру, что сейчас будем смотреть на значение переменной «a» и подбирать к ней какое-то значение (
switch (a)
). - Дальше мы пишем несколько вариантов значений для этой переменной, а после двоеточия — что нужно сделать, если этот вариант подходит.
- Компьютер начинает сверху вниз проверять значения и как только доходит до первого совпадения — выполняет соответствующий набор команд.
Вариантов выбора может быть сколько угодно: хоть один, хоть сто — компьютер справится с любым количеством. Команд внутри действий тоже может быть сколько угодно. Для наглядности добавим в вариант с единицей несколько команд:
a = 1;
b = 0;
switch (a) {
case 1:
console.log('Итак, какой же будет результат?');
console.log('Добавим немного математических команд');
b = a + 3 + (234-3234*255)
console.log('Наконец даём ответ');
console.log('Один');
break;
case 2: console.log('Два'); break;
case 3: console.log('Три'); break;
}
Что делать, если ни один из вариантов не подошёл
Обычно, если ни один из вариантов не подошёл, компьютер просто продолжает работу и переходит к следующей команде, которая идёт за оператором множественного выбора. Но можно сделать так, чтобы компьютер выполнил ещё какие-то команды, если ни один из вариантов не совпадает. Для этого добавляют действия по умолчанию, если ничего не сработало:
В коде на JavaScript это выглядит так:
a = 1;
switch (a) {
case 1: console.log('Один'); break;
case 2: console.log('Два'); break;
case 3: console.log('Три'); break;
default: console.log('Мы не знаем, что вы выбрали'); break;
}
Если компьютер увидит, что ни один из вариантов не подходит, он выполнит те команды, которые у нас прописаны в блоке действий по умолчанию. Иногда это бывает полезно.
Можно ли написать два одинаковых значения для выбора?
Можно, только сработает первый из них — так устроена логика этого оператора. Компьютер не проверяет, что именно вы предлагаете как варианты, — он просто смотрит их по очереди и выполняет первый, который подошёл, а остальные пропускает.
Примеры оператора множественного выбора в разных языках программирования
Посмотрите на примеры кода на разных языках и попробуйте найти в них общие элементы. Знать синтаксис языка при этом не обязательно — достаточно увидеть схему в целом и понять, что почти во всех языках этот оператор работает плюс-минус одинаково.
switch (membershipStatus) {
case 'vip':
// выполнится, если в переменной membershipStatus хранится строка 'vip'
console.log('Приветствуем вас, ваше великолепие!')
console.log('Рады вас видеть!')
break
case 'diamond':
console.log('Здравствуйте, бриллиантовый клиент!')
break
case 'gold':
console.log('Привет, золотой мой!')
break
default:
// выполнится, если ни один другой случай не сработал
console.log('Прив')
break
}
int temperature = 40;
switch(temperature)
{
case 36:
System.out.println("Низкая");
break;
case 37:
System.out.println("Нормальная");
break;
case 38:
System.out.println("Высокая");
break;
default:
System.out.println("Нужна скорая");
}
switch (count) // начало оператора switch
{
case 1: // если count = 1
{
cout << a << " + " << b << " = " << a + b << endl; // выполнить сложение
break;
}
case 2: // если count = 2
{
cout << a << " - " << b << " = " << a - b << endl; // выполнить вычитание
break;
}
case 3: // если count = 3
{
cout << a << " * " << b << " = " << a * b << endl; // выполнить умножение
break;
}
case 4: // если count = 4
{
cout << a << " / " << b << " = " << a / b << endl; // выполнить деление
break;
}
default: // если count равно любому другому значению
cout << "Nepravilni vvod" << endl;
}
Что дальше
В следующий раз поговорим про сложные условия — когда нам нужно проверить не что-то одно, а сразу несколько условий, причём, возможно, в разных комбинациях. Подпишитесь, чтобы не пропустить.