Pascal-case-statement
提供:Dev Guides
パスカルケースステートメント
*if-then-else* ステートメントにより、プログラムに複数の決定を実装できることがわかりました。 これは、 *case* ステートメントを使用してより簡単に実現することもできます。
構文
caseステートメントの構文は次のとおりです-
case (expression) of
L1 : S1;
L2: S2;
...
...
Ln: Sn;
end;
ここで、 L1 、 L2 … ケースラベルまたは入力値です。整数、文字、ブール値、列挙データ項目などがあります。 S1 、 S2 、… Pascalステートメントです。これらの各ステートメントには、1つまたは複数のケースラベルが関連付けられている場合があります。 この式は、 case selector または case index と呼ばれます。 ケースインデックスは、ケースラベルに対応する値を想定する場合があります。
caseステートメントには、常に end ステートメントが関連付けられている必要があります。
次のルールは、ケースステートメントに適用されます-
- caseステートメントで使用される式は、整数型または列挙型を持つか、クラスが整数型または列挙型への単一の変換関数を持つクラス型である必要があります。
- 1つのケース内に任意の数のcaseステートメントを含めることができます。 各ケースの後に、比較する値とコロンが続きます。
- ケースのケースラベルは、ケースステートメントの式と同じデータ型である必要があり、定数またはリテラルである必要があります。
- コンパイラーはケース式を評価します。 ケースラベルの値の1つが式の値と一致する場合、このラベルに続くステートメントが実行されます。 その後、プログラムは最終終了後も継続します。
- 式の値に一致するケースラベルがない場合、elseまたはそれ以外のキーワードの後のステートメントリストが実行されます。 これは空のステートメントリストにすることができます。 elseの部分が存在せず、式の値に一致するケース定数がない場合、プログラムフローは最終終了後も続行されます。
- ケースステートメントは複合ステートメント(つまり、Begin … 終了ブロック)。
流れ図
例
次の例は、概念を示しています-
program checkCase;
var
grade: char;
begin
grade := 'A';
case (grade) of
'A' : writeln('Excellent!' );
'B', 'C': writeln('Well done' );
'D' : writeln('You passed' );
'F' : writeln('Better try again' );
end;
writeln('Your grade is ', grade );
end.
上記のコードをコンパイルして実行すると、次の結果が生成されます-
Excellent!
Your grade is A