switch...case
switch...case выбирает блок кода по значению переменной — удобная альтернатива длинной цепочке if...else if, особенно при обработке команд или состояний.
Полная статья
Описание
Как и if, switch...case управляет ходом выполнения программы: в зависимости от значения переменной выполняется тот или иной блок кода. Принцип работы прост — оператор последовательно сравнивает значение переменной с константами в каждом case и, найдя совпадение, начинает выполнять код этой ветки.
Это особенно удобно, когда нужно обработать несколько фиксированных значений: например, команды, поступающие по Serial, коды кнопок или состояния конечного автомата. Цепочка if...else if...else if в таких случаях читается хуже и сложнее поддерживается.
Ключевое слово break завершает выполнение текущей ветки и передаёт управление за пределы switch. Если break не написать, выполнение «провалится» в следующий case — код продолжит работать дальше независимо от того, совпадает ли следующая метка с переменной. Иногда это используют намеренно, но чаще это ошибка, поэтому всегда проверяйте наличие break в конце каждого блока.
Синтаксис
switch (var) {
case label1:
// операторы
break;
case label2:
// операторы
break;
default:
// операторы
break;
}
Параметры
var: целочисленная переменная, значение которой сравнивается с метками case. Подходит любой целочисленный тип данных: byte, char, int, long.
label1, label2: целочисленные константы, с которыми сравнивается переменная. Тип должен быть совместим с типом переменной.
Тип данных
boolтоже допустим, если в операторе используется ровно два вариантаcase.
В качестве значений можно использовать отрицательные числа — это корректно и иногда полезно при работе с кодами ошибок или направлениями движения.
Возвращает
Ничего
Пример кода
switch (var) {
case 1:
// выполняется, когда var равно 1
break;
case 2:
// выполняется, когда var равно 2
break;
default:
// если ничего не совпало, выполняется default
// default необязателен
break;
}
Где применяется
- Обработка команд по Serial — каждый символ или число соответствует определённому действию.
- Конечные автоматы — переменная хранит текущее состояние устройства, а
switch...caseвыбирает нужное поведение. - Меню на дисплее — в зависимости от номера выбранного пункта выполняется соответствующий код.
- Реакция на нажатие кнопок — если кнопок несколько и каждой соответствует своё действие.
Практические замечания
- Всегда завершайте каждый
caseоператоромbreak, если не планируете намеренный «провал» в следующую ветку. - Добавляйте ветку
defaultв конце — она сработает, если ни одинcaseне совпал. Это помогает поймать неожиданные значения и упрощает отладку. switch...caseработает только с целыми числами и символами (char). Сравнивать числа с плавающей точкой (float,double) или строки (String) этим способом нельзя — для таких случаев используйтеif.- Если несколько значений должны выполнять одинаковый код, можно написать их подряд без
breakмежду ними — это легальный и читаемый приём. - При отладке удобно добавить в ветку
defaultвывод вSerial.println()— так сразу видно, что пришло неожиданное значение.