サーチ…
前書き
進捗状況ABLは、 IF/THEN/ELSE
とCASE
という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.