Многовариантная проверка по одному выражению
Если нужно выполнять разную логику в зависимости от разных значений одного и того же выражения, оператор case .. of .. end подходит идеально.
case SomeValue of
0: DoSomething;
1: DoSomethingElse;
2: begin
IfItsTwoThenDoThis;
AndAlsoDoThis;
end;
3..10: DoSomethingInCaseItsInThisRange;
11, 21, 31: AndDoSomethingForTheseSpecialValues;
else
DoSomethingInCaseOfUnexpectedValue;
end;Code language: JavaScript (javascript)
Ветвь else необязательна, её роль аналогична ключевому слову default в операторе switch языков семейства C.
Если ни одна ветвь не подходит и блок else не прописан, никакой код не выполнится.
Если вы знакомы с языками группы C и сравните конструкцию switch с оператором case Pascal, заметите, что у case Pascal отсутствует автоматическое проваливание (fall-through) — это осознанное преимущество языка. Не нужно вручную добавлять оператор break; за один запуск срабатывает максимум одна ветвь case, после чего управление сразу выходит из всей конструкции case.
5 допустимых вариантов записи условий
case num of
5: Writeln('Равно 5'); // Одно единственное значение
1,3,5: Writeln('Совпадает с 1, 3 или 5'); // Несколько значений через запятую
10..20: Writeln('Диапазон от 10 до 20'); // Непрерывный числовой интервал
'a'..'z': Writeln('Строчные латинские буквы'); // Также поддерживаются интервалы символов
else
Writeln('Подходящего значения нет');
end;Code language: JavaScript (javascript)
Ветви с несколькими инструкциями обязательно оборачивайте в begin..end
case n of
2: begin
Writeln('Ветвь 2');
Writeln('Выполнить несколько строк кода');
end;
end;Code language: JavaScript (javascript)
Ниже приведён пример: вводите ASCII-число в диапазоне 1–128, после чего программа определяет тип символа по полученному коду.
{$ifdef FPC} {$mode objfpc} {$H+} {$endif}
{$codepage utf8}
program AsciiJudge;
// Обёртка-процедура: принимает ASCII-код 0–128 для определения категории символа
procedure JudgeAsciiCode(code: Integer);
begin
case code of
// 1. Сопоставление по одному значению + многострочный блок begin end (клавиша Enter, ASCII=13)
13: begin
Writeln('======== Специальная клавиша Enter ========');
Writeln('ASCII-код: 13 управляющий символ возврата каретки');
Writeln('=============================================');
end;
// 2. Несколько дискретных значений через запятую: все стандартные управляющие символы 0-12, 14-31
0,1,2,3,4,5,6,7,8,9,10,11,12,14,15..31:
Writeln('Тип: управляющий символ');
// 3. Проверка по диапазону: цифры 0~9, ASCII 48~57
48..57: Writeln('Тип: цифры 0-9');
// Диапазон: прописные буквы A-Z
65..90: Writeln('Тип: прописные латинские буквы A-Z');
// Диапазон: строчные буквы a-z
97..122: Writeln('Тип: строчные латинские буквы a-z');
// 4. Ветвь по умолчанию else + многострочный блок begin end (знаки препинания, символы)
else
begin
Writeln('Тип: знак препинания / символ');
Writeln('Введённый ASCII-код: ', code);
end;
end;
end;
var
asciiNum: Integer;
begin
Write('Введите ASCII-число из диапазона 0~128: ');
ReadLn(asciiNum);
// Ограничение диапазона ввода
if (asciiNum >= 0) and (asciiNum <= 128) then
JudgeAsciiCode(asciiNum)
else
Writeln('Введённое число выходит за пределы диапазона 0~128, значение некорректно!');
ReadLn;
end.Code language: PHP (php)
Подробнее об ASCII-кодах можно прочитать в статье по ссылке: ASCII table — Table of ASCII codes, characters and symbols
Многозначная условная проверка (оператор case)