単一式による複数分岐判定
同じ式の値に応じて異なる処理を実行したい場合、case .. of .. end 文が非常に便利です。
case SomeValue of
0: DoSomething;
1: DoSomethingElse;
2: begin
IfItsTwoThenDoThis;
AndAlsoDoThis;
end;
3..10: DoSomethingInCaseItsInThisRange;
11, 21, 31: AndDoSomethingForTheseSpecialValues;
else
DoSomethingInCaseOfUnexpectedValue;
end;Code language: JavaScript (javascript)
else 分岐は省略可能で、C系言語の switch における default と同じ役割です。
いずれの分岐にも一致せず else も記述されていない場合、一切のコードは実行されません。
C系言語に慣れている方が switch 文と比較すると、Pascal の case には自動フォールスルー(fall-through)が存在しない点に気づきます。これはPascalが意図的に設計された長所です。手動で break を記述する必要はなく、実行される分岐は最大で1つだけで、処理完了後直ちにcaseブロック全体を抜けます。
5種類の正当な記述方法
case num of
5: Writeln('5と等しい'); // 単一の数値
1,3,5: Writeln('1、3、5のいずれかに一致'); // カンマ区切りの複数数値
10..20: Writeln('10から20までの範囲'); // 連続した数値範囲
'a'..'z': Writeln('小文字アルファベット'); // 文字範囲にも対応
else
Writeln('一致する値なし');
end;Code language: JavaScript (javascript)
複数行処理の分岐には begin..end が必須
case n of
2: begin
Writeln('分岐2');
Writeln('複数行のコードを実行');
end;
end;Code language: JavaScript (javascript)
次の例は1~128のASCII数値を入力し、入力値に対応するASCII文字の種類を判定します。
{$ifdef FPC} {$mode objfpc} {$H+} {$endif}
{$codepage utf8}
program AsciiJudge;
// 手続きを定義:0~128のASCIIコードを受け取り分類判定
procedure JudgeAsciiCode(code: Integer);
begin
case code of
// 1. 単一値一致 + 複数行begin end(改行キー ASCII=13)
13: begin
Writeln('======== 特殊な改行キー ========');
Writeln('ASCIIコード:13 復帰制御文字');
Writeln('================================');
end;
// 2. カンマ区切り複数離散値:0-12、14-31 全ての制御文字
0,1,2,3,4,5,6,7,8,9,10,11,12,14,15..31:
Writeln('種別:制御文字');
// 3. 範囲一致:数字 0~9 ASCII 48~57
48..57: Writeln('種別:数字 0-9');
// 範囲:大文字アルファベット A-Z
65..90: Writeln('種別:大文字英字 A-Z');
// 範囲:小文字アルファベット a-z
97..122: Writeln('種別:小文字英字 a-z');
// 4. else 既定分岐 + 複数行begin end(記号・句読点)
else
begin
Writeln('種別:句読点/記号');
Writeln('入力したASCIIコード:', code);
end;
end;
end;
var
asciiNum: Integer;
begin
Write('0~128の間のASCII数値を入力してください:');
ReadLn(asciiNum);
// 入力範囲制限
if (asciiNum >= 0) and (asciiNum <= 128) then
JudgeAsciiCode(asciiNum)
else
Writeln('入力が0~128の範囲を超えています、無効です!');
ReadLn;
end.Code language: PHP (php)
ASCIIコードについては、下記の記事を参照して確認できます。ASCII table – Table of ASCII codes, characters and symbols
複数値条件判定(case文)
Previous: 論理演算子、関係演算子、ビット演算子