if 條件判斷

使用 if .. then 或是 if .. then .. else,當條件成立時執行對應程式碼。與 C 系列語言不同:Pascal 的條件運算式不需要用括號包覆

var
  A: Integer;
  B: boolean;
begin
  // 條件成立僅執行單行敘述,不用 begin end
  if A > 0 then
    DoSomething;

  // 條件成立需執行多行敘述,必須以 begin end 包覆成程式區塊
  if A > 0 then
  begin
    DoSomething;
    AndDoSomethingMore;
  end;

  // 單行敘述 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 後只有一行程式:可省略 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

程式會提示你輸入分數,輸入完畢後,會輸出對應等級。

若顯示非英文文字出現亂碼,可以新增這一行:{$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('Your score:');
  ReadLn(score);
  Writeln('Your level:', GetLevel(score));
  ReadLn;
end.Code language: PHP (php)

if 條件判斷

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *