Instrukcja wyboru Case


Instrukcja wyboru case stanowi czytelną alternatywę w stosunku do złożonych, wielokrotnie zagnieżdżonych instrukcji if...then...else.

Składnia instrukcji case:

case wWyb of
  listaWyboru1: instr1;
  ...
  listaWyboruN: instrN;
end

gdzie: wWyb jest wyrażeniem typu porządkowego (dlatego typ string nie jest dozwolony); każda z list wyboru (listaWyboru1, ..., listaWyboruN) może mieć jedną z poniższych form:

Każda wartość reprezentowana przez listę wyboru musi być unikalna; podzakresy i listy nie mogą się nakładać.

Instrukcja case może być zakończona klauzulą else:

case wWyb of
  listaWyboru1: instr1;
  ...
  listaWyboruN: instrN;
else
  instr;
end

Jeśli lista wyboru zawiera wartość równą wartości wyrażenia wWyb, wykonywana jest instrukcja umieszczona przy tej liście wyboru. Jeśli żadna z list wyboru nie zawiera wartości takiej jak wWyb, wykonywana jest instrukcja umieszczona w klauzuli else.

Następująca instrukcja wyboru:

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

jest równoważna zgnieżdżonej instrukcji warunkowej:

if I in [1..5] then
  Caption := 'Low'
  else if I in [6..10] then
    Caption := 'High'
    else if (I = 0) or (I in [10..99]) then
      Caption := 'Out of range'
      else
        Caption := '';

Inne przykłady instrukcji wyboru:

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;