if 条件判定

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 条件判定

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です