構造化プログラミング命令

構造化プログラミング命令を次の表に示します。

DO 命令では、演算項目 1 の値から始めて、毎回対応する ENDDO 命令の値だ け増分して、演算項目 2 に指定された限界に達するまで 0 回または 1 回以上 演算グループを処理することができます。

DOU および DOUxx (条件が真になるまでの繰り返し) 命令では、 演算グループを 1 回または複数回処理することができます。 Do-Until 命令の終わりは ENDDO 命令で示されます。

DOW および DOWxx (条件が真の間繰り返し) 命令では、 演算グループを 0 回または 1 回以上処理することができます。 Do-While 命令の終わりは ENDDO 命令で示されます。

FOR 命令によって、演算のグループの反復処理が可能になります。 開始値は、索引名に割り当てられます。 増分値および限界値も同様に指定できます。 開始値、増分値、限界値は、自由形式の式にすることができます。ENDFOR 命令 は、FOR グループの終わりを示します。

LEAVE 命令は、制御のフローを早期に中断して、反復構造化グループの ENDDO 命令または ENDFOR 命令の後のステートメントに制御を渡します。ITER 命令では、次のループの繰り返しが即時に行われます。

IF および IFxx 命令では、指定された条件が満たされた場合に、 演算グループを処理することができます。 ELSE 命令では、条件が満たされない場合に処理する演算グループを指定するこ とができます。 ELSEIF 命令は、ELSE 命令と IF 命令を組み合わせたものです。IF または IFxx グループの終わりは ENDIF で示されます。

SELECT、WHEN、WHENxx、および OTHER グループの命令は、 命令の複数の代替順序のうちの 1 つを条件付きで処理するために使用されます。 選択グループの始めは SELECT 命令で示されます。 WHEN および WHENxx 命令は、命令の処理順序を選択するために使用されます。 OTHER 命令は、WHENxx 条件がどれも満たされない時に処理する命令の順序を 示すために使用されます。 選択グループの終わりは ENDSL 命令で示されます。

ANDxx および ORxx 命令は DOUxx、DOWxx、WHENxx、および IFxx 命令と 一緒に使用され、IFxx 命令はさらに複雑な条件を指定するために使用 されます。ANDxx 命令の方が ORxx 命令よりも優先順位が高くなります。 ただし、IF、 DOU、DOW、および WHEN 命令では、それらの xx が付いている命 令よりもさらに簡潔に、複雑な式をコーディングできることに注意してください。

図 1. AND/OR の優先順位の例
*...1....+....2....+....3....+....4....+....5....+....6....+....7...
CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq....
 *
 * In the following example, indicator 25 will be set on only if the
 * first two conditions are true or the third condition is true.
 *
 * As an expression, this would be written:
 * EVAL *IN25 = ((FIELDA > FIELDB) AND (FIELDA >= FIELDC)) OR (FIELDA < FIELDD)
 *
 *
C     FIELDA        IFGT      FIELDB
C     FIELDA        ANDGE     FIELDC
C     FIELDA        ORLT      FIELDD
C                   SETON                                        25
C                   ELSE
C                   SETOFF                                       25
C                   ENDIF

DO、DOUxx、DOWxx、FOR、IFxx、MONITOR、または SELECT 命令 (ANDxx または ORxx 命令を伴う場合もある)、および ENDyy 命令は、構造化グループを区切ります。ENDDO 命令は、それぞれの DO、DOUxx、および DOWxx グループを終了するか、 または指定された終了条件が満たされるまでその構造化グループを繰り返し処理 します。 ENDFOR 命令は、各 FOR グループを終了します。SELECT は ENDSL で終了しなければなりません。 IFxx 命令 および ELSE を伴う IFxx 命令は、ENDIF 命令で終了しなければなり ません。

ANDxx、DOUxx、DOWxx、IFxx、ORxx、および WHENxx 命令コードで比較を行 なう場合の規則は、比較命令に示されている規則と同じです。

ANDxx、DOUxx、DOWxx、IFxx、ORxx、および WHENxx 命令で、xx は次の値に することができます。
xx
意味
GT
演算項目 1 は演算項目 2 より大きい。
LT
演算項目 1 は演算項目 2 より小さい。
EQ
演算項目 1 は演算項目 2 と等しい。
NE
演算項目 1 は演算項目 2 と等しくない。
GE
演算項目 1 は演算項目 2 より大きいか等しい。
LE
演算項目 1 は演算項目 2 より小さいか等しい。
ENDyy 命令で、yy は次の値にすることができます。
yy
意味
CS
CASxx 命令の終わり。
DO
DO、DOUxx、および DOWxx 命令の終わり。
FOR
FOR 命令の終わり。
IF
IFxx 命令の終わり。
SL
SELECT 命令の終わり。
ブランク
任意の構造化命令の終わり。
注: ENDyy 命令の yy は任意指定です。

構造化グループ (この場合には DO グループ) に別の完全な構造化グループ が入っていると、ネストされた構造化グループが形成されます。 構造化グループは最大 100 レベルの深さまでネストすることができます。 次の例は、3 レベルの深さまでネストされた構造化グループです。

図 2. ネストされた構造化グループ
REQTEXT
構造化グループを指定する場合には次のことに留意してください。
  • ネストされたそれぞれの構造化グループは、外側のレベルの構造化グルー プ内に完全に含まれていなければなりません。
  • それぞれの構造化グループには、DO、DOUxx、DOWxx、FOR、IFxx、または SELECT 命令の 1 つと、それに対応する ENDyy 命令が含まれていなければなりません。
  • 構造化グループは、明細演算、合計演算、またはサブルーチン演算に入れ ることができますが、それらの間で分割することはできません。
  • 構造化グループの外から構造化グループに分岐すると、好ましくない結果 になることがあります。