Условный оператор CASE служит для множественного ветвления действий. В некотором смысле, он объединяет несколько операторов IF в единую цепочку.
Основное преимущество оператора CASE в его наглядности. Если тип данных позволяет, то разработчику нет необходимости создавать многократно вложенные операторы if
— достаточно перечислить ключевые значения в блоке единственного оператора case
.
Общий формат использования оператора CASE
case <Expression> of
Value1: <Action1>;
Value2: <Action2>;
...
ValueN: <ActionN>;
else
<ElseAction>;
end;
Здесь
- Expression — параметр типа
Boolean
,Integer
,Byte
,string
, перечисляемого или другого типа - Action1 — действие при выполнении условия 1 (Expression=Value1)
- Action2 — действие при выполнении условия 2 (Expression=Value2)
- ActionN — действие при выполнении условия N (Expression=ValueN)
- ElseAction — действие при невыполнении всех предыдущих условий
Оператор CASE и целые числа
В следующем примере функция Rb возвращает расчетное сопротивление бетона (призменную прочность) в зависимости от класса бетона B:
function Rb(B: Integer): Double;
begin
case B of
10: Result := 6.00;
15: Result := 8.50;
20: Result := 11.50;
25: Result := 14.50;
30: Result := 17.0;
else
Result := 0.0;
end;
end;
Блок else
нередко используется для сигнализирования об ошибке. В приведенном выше примере мы получим нулевую призменную прочность, если пользователь введет несуществующий (неопределенный) класс бетона.
Оператор CASE и логические выражения
Оператор case
может анализировать логические выражения, хотя более компактная запись в этом случае достигается оператором IF.
procedure Check(Condition: Boolean);
begin
case B of
True: ShowMessage('Condition=True');
False: ShowMessage('Condition=False');
end;
end;
Оператор CASE и перечисления
Оператор CASE может работать с перечисляемым типом данных.
Например, следующая процедура анализирует состояние окна ТехЭдитора (параметр Application.MainForm.WindowState
) и выводит соответствующее сообщение с помощью процедуры ShowMessage
(окно раскрыто максимально, свернуто на панель задач или имеет ограниченные размеры на экране):
uses
Forms;
procedure WindowStateMessage;
begin
case Application.MainForm.WindowState of
wsMaximized:
ShowMessage('TechEditor is maximized');
wsMinimized:
ShowMessage('TechEditor is minimized');
wsNormal:
ShowMessage('TechEditor is normal');
end;
end;
begin WindowStateMessage; end.
Оператор CASE и строки текста
Данная возможность не поддерживается традиционными средами программирования (например, Delphi) и является уникальной функцией TechEditor:
begin
case Day of
'monday':
ShowMessage('Let's work!');
'friday':
ShowMessage('Happy weekened!');
end;
end;
Применение оператора CASE наиболее оправдано в случаях, когда алгоритм подразумевает ветвление действий на три и более узлов.