RPG

203. RPGソース の近代化 (3)

■ EVAL を使ってわかりやすい算術演算を

RPG は本来、その名前が示すとおり( SRPG=Report Program Generator )
印刷出力を第一の目的として生まれてきた開発言語であるので
複雑な算術演算の表現が冗長になってしまう傾向にある。

例えば

金額 = 個数 X 単価 + 送料
合計金額 = Σ金額

を計算するのに旧来の記述では

0001.00 C     KOSU          MULT      TANKA         KINGAKU
0002.00 C                   ADD       SORYO         KINKAKU
0003.00 C                   ADD       KINGAKU       GOKEI

となる。
演算命令 MULT, ADD, DIV, SUB, Z-ADD, Z-SUB を使った旧来の方法では
ひとつの命令ずつしか実行できないため、上記のような命令の組み合わせとなってしまい
このソースを読む人は頭の中で算術演算式に置き換えて理解する必要がある。
これに対して EVAL (= evalueate ) を使って記述すると、

[ EVAL を使ったわかりやすい算術演算 ]

0004.00 C                   EVAL      KINGAKU = KOSU * TANKA + SORYO
0005.00 C                   EVAL      GOKEI += KINGAKU

となり、特に KINGAKU = KOSU * TANKA + SORYO
金額 = 個数 x 単価 + 送料 を、そのまま記述したものであり
直感的でわかりやすいものとなっている。
このように、

演算命令 MULT, ADD, DIV, SUB, Z-ADD, Z-SUB, MOVE, MOVEL の代わりに
EVAL を使った記述に置き換えることで直感的でわかりやすい演算命令を
表現することができる。

MOVEL は EVAL で

EVAL   NMR(1) = SHNAME

のように置き換えることができるが、これは EVAL が文字変数に対して
MOVEL と同じように左寄せしていることがわかる。
MOVE を EVAL で置き換えるには EVAL ではなく EVALR を使って

EVALR    TKR(1) = SHTANKA

のように記述すること。