if .. then または if .. then .. else を使用し、条件が成立した時に対応するコードを実行します。C系言語と異なり、Pascalの条件式には括弧を付ける必要がありません。
var
A: Integer;
B: boolean;
begin
// 条件成立後の処理が1行の場合、begin end は不要
if A > 0 then
DoSomething;
// 条件成立後に複数行実行する場合は begin end でブロック化必須
if A > 0 then
begin
DoSomething;
AndDoSomethingMore;
end;
// 1行形式の if-else 構文
if A > 10 then
DoSomething
else
DoSomethingElse;
// 上記コードと論理的に同一:比較結果を事前に真偽値変数へ代入
B := A > 10;
if B then
DoSomething
else
DoSomethingElse;
end;Code language: JavaScript (javascript)
else の結合ルール
else は自身に最も近く、まだ else と紐付いていない if に結合されます。下記コードは意図通り動作します:
if A <> 0 then
if B <> 0 then
AIsNonzeroAndBToo
else
AIsNonzeroButBIsZero;Code language: HTML, XML (xml)
この else は内側の if B <> 0 に属します。
ブロックで囲わない入れ子ifは文法的に合法ですが可読性が低いです。begin … end で内側の入れ子全体を囲む記述を推奨します。インデントが乱れていても論理の境界が明確になり、分岐の追加・削除時のバグを防ぎます。
最適化された標準記法:
if A <> 0 then
begin
if B <> 0 then
AIsNonzeroAndBToo
else
AIsNonzeroButBIsZero;
end;Code language: HTML, XML (xml)
- if後の条件に括弧は不要(C/C++/Javaでは必須、Pascalは逆);
- then直後が1行のみ:
begin end省略可;複数行の場合は必須; elseは直近の内側ifに紐付く。入れ子構文には必ずブロックを使用し曖昧さを排除;- 比較式(例:
A>10)を真偽値変数に直接代入可能。
下記は実行可能な完全サンプル:点数による等級判定
論理ルール:
- 90点以上 → A
- 80点以上90点未満 → B
- 60点以上80点未満 → C
- 60点未満 → D
{$ifdef FPC} {$mode objfpc} {$H+} {$endif}
{$codepage utf8}
program ScoreLevel;
var
score: Integer;
begin
Write('試験点数を入力してください:');
ReadLn(score);
if score >= 90 then
Writeln('等級:A')
else if score >= 80 then
Writeln('等級:B')
else if score >= 60 then
Writeln('等級:C')
else
Writeln('等級:D');
ReadLn;
end.Code language: PHP (php)
コンパイル後実行
試験点数を入力してください:96
等級:A
プログラムが点数入力を促し、入力後対応する等級を出力します。
日本語など非英文字が文字化けする場合は、この1行を追加してください:{$codepage utf8}
等級判定処理を関数にまとめることもできます。
{$ifdef FPC} {$mode objfpc} {$H+} {$endif}
{$codepage utf8}
program ScoreLevelFunc;
function GetLevel(s: Integer): string;
begin
if s >= 90 then
Result := 'A'
else if s >= 80 then
Result := 'B'
else if s >= 60 then
Result := 'C'
else
Result := 'D';
end;
var
score: Integer;
begin
Write('点数:');
ReadLn(score);
Writeln('等級:', GetLevel(score));
ReadLn;
end.Code language: PHP (php)

if 条件判定
Previous: 関数・手続きと基本プリミティブ型
Next: 論理演算子、関係演算子、ビット演算子