Многозначная условная проверка (оператор case)

Многовариантная проверка по одному выражению

Если нужно выполнять разную логику в зависимости от разных значений одного и того же выражения, оператор 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)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *