API Basic If zh tw - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki

IF / ELSEIF / ELSE / END IF

ClassicUO • Basic

IF 最多選擇一個分支。先檢查 IF,再依序檢查 ELSEIF,直到第一個真條件;都不符合時執行可選的 ELSE。正常情況下接著執行 END IF 之後的程式。

完整語法

IF condition THEN
    statements
END IF
IF condition THEN
    statements
ELSEIF elseifCondition THEN
    statements
ELSE
    statements
END IF

參數

  • condition — condition:進入時檢查一次的運算式。數值零是假,非零數字是真。建議使用明確比較或 API 布林結果。
  • elseifCondition — elseifCondition:可選的額外條件,僅在前面所有條件為假時檢查。ELSEIF 必須寫成一個字。
  • statements / ELSE — statements / ELSE:後續各行的指令。ELSE 可省略、不帶條件,最多一次且位於最後。THEN、END IF 必須存在,請使用多行區塊。

傳回值

不回傳值(Unit)。IF 是控制指令,不是函式。條件或選中分支內的 RETURN 可以產生值。布林 1/0 可與 TRUE/FALSE 比較;IF count 接受任何非零數量,而 IF count=TRUE 只匹配 1。

行為

  • 編譯器建立條件與結束跳躍。假分支跳至下一條件或 ELSE;選中的分支略過後續選項。巢狀 IF 各有自己的 ELSE。RETURN 離開程序時仍執行包住它的 FINALLY。
  • 為相容舊程式,IF 與數值零比較,不會把所有種類都用 CBool 轉換。因此文字 "0"、空文字、陣列、物件、Unit 都走真分支。請明確轉換文字或比較指定屬性。AndAlso/OrElse 則要求數值運算元。
  • 略過分支中的宣告不會在執行時建立變數。共用結果應在 IF 前宣告並初始化。Option Explicit 檢查名稱,不保證每條路徑都有指派。多個 ELSE 會在執行前以 SC015 拒絕,即使沒有 Option Explicit。

範例

1. 四種分類

# Classify(value) 依序檢查 <0、=0、<10,最後使用 ELSE。-2、0、7、20 得到 negative、zero、small、large。Main 回傳 "negative:zero:small:large";每次呼叫只執行一個 RETURN。
Option Explicit On
FUNCTION Classify(value)
    IF value < 0 THEN
        RETURN "negative"
    ELSEIF value = 0 THEN
        RETURN "zero"
    ELSEIF value < 10 THEN
        RETURN "small"
    ELSE
        RETURN "large"
    END IF
END FUNCTION
SUB Main()
    RETURN Classify(-2) + ":" + Classify(0) + ":" + Classify(7) + ":" + Classify(20)
END SUB

參數與執行說明:

Classify(value) 依序檢查 <0、=0、<10,最後使用 ELSE。-2、0、7、20 得到 negative、zero、small、large。Main 回傳 "negative:zero:small:large";每次呼叫只執行一個 RETURN。

2. 巢狀決策

# Action(enabled, amount) 先看 enabled,再以 amount>0 選 work 或 idle。外層 ELSE 得到 disabled。(TRUE,5)、(TRUE,0)、(FALSE,5) 組成 "work:idle:disabled"。每個 END IF 關閉自己的區塊。
Option Explicit On
FUNCTION Action(enabled, amount)
    IF enabled THEN
        IF amount > 0 THEN
            RETURN "work"
        ELSE
            RETURN "idle"
        END IF
    ELSE
        RETURN "disabled"
    END IF
END FUNCTION
SUB Main()
    RETURN Action(TRUE, 5) + ":" + Action(TRUE, 0) + ":" + Action(FALSE, 5)
END SUB

參數與執行說明:

Action(enabled, amount) 先看 enabled,再以 amount>0 選 work 或 idle。外層 ELSE 得到 disabled。(TRUE,5)、(TRUE,0)、(FALSE,5) 組成 "work:idle:disabled"。每個 END IF 關閉自己的區塊。

3. 觀察條件順序

# Check(calls,value) 透過 ByRef 增加 calls 並回傳 value。第一條件是假、第二是真,第三條件與 ELSE 被略過。result=7、calls=2,Main 回傳 calls*10+result=27。所有輔助函式均完整提供。
Option Explicit On
FUNCTION Check(ByRef calls, ByVal value)
    calls += 1
    RETURN value
END FUNCTION
SUB Main()
    VAR calls = 0
    VAR result = 0
    IF Check(calls, FALSE) THEN
        result = 5
    ELSEIF Check(calls, TRUE) THEN
        result = 7
    ELSEIF Check(calls, TRUE) THEN
        result = 9
    ELSE
        result = 8
    END IF
    RETURN calls * 10 + result
END SUB

參數與執行說明:

Check(calls,value) 透過 ByRef 增加 calls 並回傳 value。第一條件是假、第二是真,第三條件與 ELSE 被略過。result=7、calls=2,Main 回傳 calls*10+result=27。所有輔助函式均完整提供。


en · ru · uk · fr · de · it · es · zh-tw · ja · ko

Basic