RPG

202. RPGソース の近代化 (2)

■ 変数は、あらかじめ定義仕様書で !

RPG ソースでは、ご存知のとおり演算仕様書の結果のフィールドの位置で
自由に新しいフィールドを定義することができる便利な機能がある。
しかし一般にオープン系では使用するすべての変数は最初に定義しておくのが慣習となっている。
ANSI-C, C/400, VisualBASIC, VC++ , ... もすべて最初に変数を定義する。
RPG を初めて学習する人もそれまでには何らかの開発言語に触れてきているので
他の開発言語と同じように最初に変数を定義すしておくほうがわかりやすい。

0025.00 DICONV_T          DS                  QUALIFIED
0026.00 D ICORV                   1      4B 0 INZ(0)
0027.00 D ICOC                    5     52B 0 DIM(00012)
:
:
0038.00 D INPUT           S            512A
0039.00 D INPUT_P         S               *   INZ(%ADDR(INPUT))
0040.00 D INPUT_PP        S               *
0041.00 D INPLEN          S             10I 0
0042.00 D INPL_P          S               *   INZ(%ADDR(INPLEN))
0043.00 D OUTPUT          S            512A
0044.00 D OUTPUT_P        S               *   INZ(%ADDR(OUTPUT))
0045.00 D OUTPUT_PP       S               *
0046.00 D OUTLEN          S             10I 0
0047.00 D OUTL_P          S               *   INZ(%ADDR(OUTLEN))
0048.00 D CD              DS                  LIKEDS(ICONV_T)
0049.00 D CD_P            S               *   INZ(%ADDR(CD))
0050.00 D RES             S              4B 0
0051.00 D FROMCODE        DS                  QUALIFIED
0052.00 D  CCSID                  1      4B 0
0053.00 D  OTHER                  5     32B 0 DIM(00007)
0054.00 D FROMCODE_P      S               *   INZ(%ADDR(FROMCODE))
【 解説】

S としてフィールドを定義することができる。
定義仕様書は RPG III には無い、ILE-RPG だけの仕様書である。
D-仕様書では変数を定義すると同時に INZ キーワードを使って初期化することもできる。
また LIKELIKEDS を使って同じ属性の変数を再定義することもできる。
* を使ってポインターを定義するときは %ADDR によって、指定したある変数の
ポインターをセットすることもできる。
すべての変数を D-仕様書で定義するようにすれば、プログラム内で使用される変数の
属性を探したり変更するのにとても便利でわかりやすいものとなる。

ポインターを必要とする変数を LIKELIKEDS で定義してはならない。
これは RPG 解説書には書かれていないが LIKELIKEDS によって
定義されたフィールドは実際には正しく動作しなくなるので注意が必要である。