サーチ…


前書き

進捗状況ABLは、 IF/THEN/ELSECASEという2つの条件付きステートメントをサポートしています。

IF ... THEN ... ELSEステートメント

IF THEN ELSE文では、結果は単一の文になります。

DEFINE VARIABLE i AS INTEGER     NO-UNDO.

IF i = 0 THEN
    MESSAGE "Zero".
ELSE 
    MESSAGE "Something else".

または、たとえばDOブロックを追加するなどして、ブロックを作成します。

DEFINE VARIABLE i AS INTEGER     NO-UNDO.

IF i = 0 THEN DO:
    RUN procedure1.
    RUN procedure2.
END.
ELSE DO: 
    RUN procedure3.
    RUN procedure4.
END.

ELSE IF -syntaxを使用していくつかのIF文をネストすることができます。

DEFINE VARIABLE i AS INTEGER     NO-UNDO.

IF i = 0 THEN DO:
    RUN procedure1.
    RUN procedure2.
END.
ELSE IF i = 1 THEN DO:
    RUN procedure3.
    RUN procedure4.

END.
ELSE DO: 
    RUN procedure5.
    RUN procedure6.
END.

ELSE -partは必須ではありません:

DEFINE VARIABLE l AS LOGICAL     NO-UNDO.

l = TRUE.

IF l = TRUE THEN DO:
    MESSAGE "The l variable has the value TRUE" VIEW-AS ALERT-BOX.
END.

IF / ELSE IFは、内部接続の有無にかかわらず、いくつかの条件を比較できます。これにより、コードをいくつかの方法で自由に混乱させることができます。

DEFINE VARIABLE i AS INTEGER     NO-UNDO.
DEFINE VARIABLE l AS LOGICAL     NO-UNDO.

IF i < 30 OR l = TRUE THEN DO:
    
END.
ELSE IF i > 30 AND l = FALSE OR TODAY = DATE("2017-08-20") THEN DO:

END.
ELSE DO:
    MESSAGE "I dont really know what happened here".
END.

場合

CASE文は、 IF/ELSEよりもはるかに厳密です。単一の変数と等価のみを比較することができ、largetより小さい/小さいなどは比較できません。

VARIABLE C AS CHARACTER NO-UNDOを定義します。

CASE c:
    WHEN "A" THEN DO:
        RUN procedureA.
    END.
    WHEN "B" THEN DO:
        RUN procedureB.
    END.
    OTHERWISE DO:
        RUN procedureX.
    END.
END CASE.

ORを使用すると、 WHENはそれぞれ異なる値を比較できます。

DEFINE VARIABLE c AS CHARACTER   NO-UNDO.

CASE c:
    WHEN "A" THEN DO:
        RUN procedureA.
    END.
    WHEN "B" OR WHEN "C" THEN DO:
        RUN procedureB-C.
    END.
    OTHERWISE DO:
        RUN procedureX.
    END.
END CASE.

IF文と同様に、各ブランチは単一の文またはブロックのいずれかになります。 ELSEように、 OTHERWISEは必須ではありません。

DEFINE VARIABLE c AS CHARACTER   NO-UNDO.

CASE c:
    WHEN "A" THEN
        RUN procedureA.
    WHEN "B" OR WHEN "C" THEN
        RUN procedureB-C.
END CASE.

Cスタイルのswitchとは異なり、 CASE文をエスケープする必要はありません.1つのブランチだけが実行されます。複数のWHENが一致した場合、最初のものだけがトリガされます。 OTHERWISEは最後でなければならず、上のブランチのいずれも一致しない場合にのみトリガーされます。

DEFINE VARIABLE c AS CHARACTER   NO-UNDO.

c = "A".

CASE c:
    WHEN "A" THEN
        MESSAGE "A" VIEW-AS ALERT-BOX. //Only "A" will be messaged
    WHEN "A" OR WHEN "C" THEN
        MESSAGE "A or C" VIEW-AS ALERT-BOX.
END CASE.

IF ... THEN ... ELSE関数

IF THEN ELSEは、単一の値を返す関数のようにも使用できます。これは三成分とよく似てい? Cのオペレータ

DEFINE VARIABLE i AS INTEGER     NO-UNDO.
DEFINE VARIABLE c AS CHARACTER   NO-UNDO.

/* Set c to "low" if i is less than 5 otherwise set it to "high"    
c = IF i < 5 THEN "low" ELSE "high".

かっこを使用すると、このようなコードの可読性が簡単になります。

DEFINE VARIABLE i AS INTEGER     NO-UNDO.
DEFINE VARIABLE c AS CHARACTER   NO-UNDO.

c = (IF i < 5 THEN "low" ELSE "high").

IF -partの値とELSE -partの値は、同じデータ型でなければなりません。この場合、 ELSE IFを使用することはできません。

DEFINE VARIABLE dat                AS DATE        NO-UNDO.
DEFINE VARIABLE beforeTheFifth     AS LOGICAL   NO-UNDO.

dat = TODAY.

beforeTheFifth = (IF DAY(dat) < 5 THEN TRUE ELSE FALSE).

IF記述でいくつかの比較を行うことができます。

DEFINE VARIABLE between5and10 AS LOGICAL     NO-UNDO.
DEFINE VARIABLE i             AS INTEGER     NO-UNDO INIT 7.

between5and10 = (IF i >= 5 AND i <= 10 THEN TRUE ELSE FALSE).

MESSAGE between5and10 VIEW-AS ALERT-BOX.


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow