ついに、「 RPG
にも for ~ each が来ましたよ~!」
使用できるのは、V7R5 ,V7R3+PTF 以上 です。その他の言語でもよく見るので、言わずもがなですが、使い方は次の通り。
QII0200R
D*- ---<< 変数定義 >>-----*
D ROW DS QUALIFIED
D ID 5S 0
D 1A
D NAME 26A
D*
D ROWS DS LIKEDS(ROW)
D DIM(05)
D*
C*- ***************************************************************
C*- * メインロジック **
C*- ***************************************************************
C Z-ADD *ZERO ID 5 0
C*
C*- for~eachで配列を処理(値セット)
C FOR-EACH ROW IN ROWS
C ADD 1 ID
C EVAL ROW.ID = ID
C EVAL ROW.NAME = ' 名前 _' + %EDITC(ID :'X')
C ROW DSPLY
C ENDFOR
C*
C ROW DSPLY
C*
C*- for~eachで配列を処理(値参照)
C FOR-EACH ROW IN ROWS
C ROW DSPLY
C ENDFOR
C*
C SETON LR
C RETURN
これの結果は、以下のスクショになります。
注意は、
他の言語とは違い、変数 ROW
は for-endfor
スコープを外れても、最後の ROW
の値を保持している(※DSPLY 00005
の2回目)。
変数 ROW
参照渡しでは無いので、値の保存には向かない点です。
FOR-EACH &ROW ROWS
とかもプラスで出来たら素敵なんだけどね。まぁ、そこは贅沢、%ELEM
を記述しなくなっただけでも良しとしましょう。