CASE
Previous  Top  Next

The case statement provides a readable alternative to complex nested if conditionals. A case statement has the form

case selectorExpression of

  caseList1: statement1;
  ...
  caseListn: statementn;
end


where selectorExpression is any expression of an ordinal type (string types are invalid) and each caseList is one of the following:

A numeral, declared constant, or other expression that the compiler can evaluate without executing your program. It must be of an ordinal type compatible with selectorExpression. Thus 7, True, 4 + 5 * 3, 'A', and Integer('A') can all be used as caseLists, but variables and most function calls cannot. (A few built-in functions like Hi and Lo can occur in a caseList. See Constant expressions.)
   A subrange having the form First..Last, where First and Last both satisfy the criterion above and First is less than or equal to Last.

A list having the form item1, ..., itemn, where each item satisfies one of the criteria above.

Each value represented by a caseList must be unique in the case statement; subranges and lists cannot overlap. A case statement can have a final else clause:

case selectorExpression of

  caseList1: statement1;
  ...
  caseListn: statementn;
else
  statements;
end


where statements is a semicolon-delimited sequence of statements. When a case statement is executed, at most one of statement1 ... statementn is executed. Whichever caseList has a value equal to that of selectorExpression determines the statement to be used. If none of the caseLists has the same value as selectorExpression, then the statements in the else clause (if there is one) are executed.

The case statement

case I of

  1
..5: Caption := 'Low';
  6
..9: Caption := 'High';
  0
10..99: Caption := 'Out of range';
else
  Caption := ''
;
end;

is equivalent to the nested conditional

if I in [1
..5then

  Caption := 'Low'

  else if I in [6
..10then
    Caption := 'High'

    else if (I = 0
or (I in [10..99]) then
      Caption := 'Out of range'

      else
        Caption := ''
;

Other examples of case statements:

case MyColor of

  Red: X := 1
;
  Green: X := 2
;
  Blue: X := 3
;
  Yellow, Orange, Black: X := 0
;
end;

case Selection of

  Done: Form1.Close;
  Compute: CalculateTotal(UnitCost, Quantity);
else
  Beep;
end;