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