Описание:
Ключевое слово Case предоставляет структурный
эквивалент последовательности операторов if над одной и той же переменной.
Оператор case более элегантен, более эффективен
и прост в сопровождении, чем многочисленные вложенные if.
Версия 2.
Он
используется в определениях записей. В этом случае он называется вариантом. Он
несет смысл в качестве отображения двух или более различных наборов объявлений
на одну и ту же секцию записи.
Он в основном
используется при обработке различных типов наборов данных в записи, при том, что
эти наборы данных содержат одно и то же содержимое. Для более ясного понимания
см. пример.
Тэг идентифицирует элементы case.
Пример кода:
var
colour : TPrimary;
number : Integer;
begin
// Show the
colour before it has an assigned value
ShowColour(colour);
// Now set the colour and try again
colour
:= Green;
ShowColour(colour);
//
Calculations can also be used in the case statement
number :=
17;
Case number mod 2 of
0 :
ShowMessage(IntToStr(Number)+' mod 2 = 0');
1 :
ShowMessage(IntToStr(Number)+' mod 2 = 1');
else
ShowMessage(IntToStr(Number)+' mod 2 is unknown');
end;
end;
// Procedure to show the colour of a passed
procedure
TForm1.ShowColour(colour : TPrimary);
begin
// Use a case
statement to see the colour of the passed var
// Note how important the else clause is, even though we have
// apparently covered all TPrimary values!
Case colour of
Red : ShowMessage('The colour is Red');
Green : ShowMessage('The colour is Green');
Blue : ShowMessage('The colour is Blue');
Yellow : ShowMessage('The colour is Yellow');
else ShowMessage('The colour is Unknown!');
end;
end;
Результат выполнения:
The colour is Unknown!
The colour is Green
17 mod 2 is 1
Пример кода:
type
// Declare a fruit record
using case to choose the
// diameter of a round fruit, or
length and height ohterwise.
TFruit = record
name : string[20];
Case isRound : Boolean of // Choose how to map the next section
True :
(diameter : Single); //
Maps to same storage as length
False :
(length : Single; // Maps
to same storage as diameter
width : Single);
end;
var
apple,
banana, fruit : TFruit;
begin
// Set up the apple as
round, with appropriate dimensions
apple.name := 'Apple';
apple.isRound := True;
apple.diameter := 3.2;
// Set up the banana as long, with appropriate dimensions
banana.name := 'Banana';
banana.isRound :=
False;
banana.length := 7.65;
banana.width :=
1.3;
// Show the attributes of the apple
fruit := apple;
if fruit.isRound
then
ShowMessage(fruit.name +' diameter = '+
FloatToStrF(fruit.diameter, ffFixed, 2, 1)+'"')
else
ShowMessage(fruit.name +' length =
'+
FloatToStrF(fruit.length, ffFixed, 2, 1)+'" width = '+
FloatToStrF(fruit.width,
ffFixed, 2, 1)+'"');
// Show the attributes of the banana
fruit := banana;
if fruit.isRound
then ShowMessage(fruit.name +' diameter = '+
FloatToStrF(fruit.diameter, ffFixed, 2, 1)+'"')
else
ShowMessage(fruit.name +' length = '+
FloatToStrF(fruit.length,
ffFixed, 2, 1)+'" width = '+
FloatToStrF(fruit.width, ffFixed, 2, 1)+'"');
end;
Результат выполнения:
Apple diameter = 3.2"
Banana length = 7.7" width = 1.3"