fbpx

Conditional CASE statement **

Print

User Rating: 5 / 5

Star ActiveStar ActiveStar ActiveStar ActiveStar Active
 

Условный оператор CASE служит для множественного ветвления действий. В некотором смысле, он объединяет несколько операторов IF в единую цепочку.

Основное преимущество оператора CASE в его наглядности. Если тип данных позволяет, то разработчику нет необходимости создавать многократно вложенные операторы if — достаточно перечислить ключевые значения в блоке единственного оператора case.

Общий формат использования оператора CASE

case <Expression> of
Value1: <Action1>;
Value2: <Action2>;
...
ValueN: <ActionN>;
else
<ElseAction>;
end;

Здесь

Оператор 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 наиболее оправдано в случаях, когда алгоритм подразумевает ветвление действий на три и более узлов.