IF ステートメントで論理条件を定義します。IF ステートメントに付随するステートメントの実行は、その条件に依存します。
このドキュメントでは、次のトピックについて説明します。
IF ステートメントには、以下の 3 つの構成要素があります。
IF |
IF 節には、満たす必要のある論理条件を指定します。
|
THEN |
THEN 節には、この条件を満たしている場合に実行するステートメント(複数可)を指定します。
|
ELSE |
(任意の)ELSE 節では、この条件を満たしていない場合に実行するステートメント(複数可)を指定できます。
|
したがって、IF ステートメントの一般的な形式は以下のようになります。
IF condition THEN execute statement(s) ELSE execute 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 FRANCISCO'
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