IF
ステートメントで論理条件を定義します。IF
ステートメントに付随するステートメントの実行は、その条件に依存します。
このドキュメントでは、次のトピックについて説明します。
IF
ステートメントには、以下の 3 つの構成要素があります。
IF | IF 節には、満たす必要のある論理条件を指定します。
|
---|---|
THEN | THEN 節には、この条件を満たしている場合に実行するステートメント(複数可)を指定します。
|
ELSE | (任意の)ELSE 節では、この条件を満たしていない場合に実行するステートメント(複数可)を指定できます。
|
したがって、IF
ステートメントの一般的な形式は以下のようになります。
IFcondition THENexecute statement(s) ELSEexecute other statement(s) END-IF
注意:
IF
条件を満たしていないときにのみ特定の処理を実行する場合、THEN IGNORE
節を指定できます。 IGNORE
ステートメントにより、条件を満たすと IF
条件は無視されます。
** Example 'IFX01': IF ************************************************************************ DEFINE DATA LOCAL 1 MYVIEW VIEW OF EMPLOYEES 2 NAME 2 BIRTH 2 CITY 2 SALARY (1:1) END-DEFINE * LIMIT 7 READ MYVIEW BY CITY STARTING FROM 'C' IF SALARY (1) LT 40000 THEN WRITE NOTITLE '*****' NAME 30X 'SALARY LT 40000' ELSE DISPLAY NAME BIRTH (EM=YYYY-MM-DD) SALARY (1) END-IF END-READ END
上記のプログラムの IF
ステートメントブロックでは、以下の条件処理が実行されます。
(IF
)給与が 40000 未満の場合、(THEN
)WRITE
ステートメントが実行されます。
それ以外の場合(ELSE
)、つまり、給与が 40000 以上の場合は DISPLAY
ステートメントが実行されます。
プログラム IFX01 の出力:
NAME DATE ANNUAL OF SALARY BIRTH -------------------- ---------- ---------- ***** KEEN SALARY LT 40000 ***** FORRESTER SALARY LT 40000 ***** JONES SALARY LT 40000 ***** MELKANOFF SALARY LT 40000 DAVENPORT 1948-12-25 42000 GEORGES 1949-10-26 182800 ***** FULLERTON SALARY LT 40000
** Example 'IFX03': IF ************************************************************************ DEFINE DATA LOCAL 1 EMPLOY-VIEW VIEW OF EMPLOYEES 2 NAME 2 CITY 2 BONUS (1,1) 2 SALARY (1) * 1 #INCOME (N9) 1 #TEXT (A26) END-DEFINE * WRITE TITLE '-- DISTRIBUTION OF CATALOGS I AND II --' / * READ (3) EMPLOY-VIEW BY CITY = 'SAN FRANSISCO' COMPUTE #INCOME = BONUS(1,1) + SALARY(1) /* IF #INCOME > 40000 MOVE 'CATALOGS I AND II' TO #TEXT ELSE MOVE 'CATALOG I' TO #TEXT END-IF /* DISPLAY NAME 5X 'SALARY' SALARY(1) / BONUS(1,1) WRITE T*SALARY '-'(10) / 16X 'INCOME:' T*SALARY #INCOME 3X #TEXT / 16X '='(19) SKIP 1 END-READ END
プログラム IFX03 の出力:
-- DISTRIBUTION OF CATALOGS I AND II -- NAME SALARY BONUS -------------------- ---------- COLVILLE JR 56000 0 ---------- INCOME: 56000 CATALOGS I AND II =================== RICHMOND 9150 0 ---------- INCOME: 9150 CATALOG I =================== MONKTON 13500 600 ---------- INCOME: 14100 CATALOG I ===================
IF
ステートメントは、複数のネスト構造にして使用できます。例えば、THEN
節の実行を、THEN
節に指定した別の IF
ステートメントに依存させることができます。
** Example 'IFX02': IF (two IF statements nested) ************************************************************************ DEFINE DATA LOCAL 1 MYVIEW VIEW OF EMPLOYEES 2 NAME 2 CITY 2 SALARY (1:1) 2 BIRTH 2 PERSONNEL-ID 1 MYVIEW2 VIEW OF VEHICLES 2 PERSONNEL-ID 2 MAKE * 1 #BIRTH (D) END-DEFINE * MOVE EDITED '19450101' TO #BIRTH (EM=YYYYMMDD) * LIMIT 20 FND1. FIND MYVIEW WITH CITY = 'BOSTON' SORTED BY NAME IF SALARY (1) LESS THAN 20000 WRITE NOTITLE '*****' NAME 30X 'SALARY LT 20000' ELSE IF BIRTH GT #BIRTH FIND MYVIEW2 WITH PERSONNEL-ID = PERSONNEL-ID (FND1.) DISPLAY (IS=ON) NAME BIRTH (EM=YYYY-MM-DD) SALARY (1) MAKE (AL=8 IS=OFF) END-FIND END-IF END-IF SKIP 1 END-FIND END
プログラム IFX02 の出力:
NAME DATE ANNUAL MAKE OF SALARY BIRTH -------------------- ---------- ---------- -------- ***** COHEN SALARY LT 20000 CREMER 1972-12-14 20000 FORD ***** FLEMING SALARY LT 20000 PERREAULT 1950-05-12 30500 CHRYSLER ***** SHAW SALARY LT 20000 STANWOOD 1946-09-08 31000 CHRYSLER FORD