RPG

468. フリー・フォーマットは万能ではない

ILE-RPGの固定様式のコーディングより
フリー・フォーマットのほうが優れているのであれば
すべてフリー・フォーマットに移行すればよいという考え方も
あるが今まで固定様式のRPG演算で記述していたものが
フリー・フォーマットでもそのまま使えるかというと
必ずしもそうではない。
_

IBMは固定様式をフリー・フォーマットに置換えた場合
意図的に使えなくしている命令がいくつかある。
その中でも伝統的によく使われる命令が使えなくする場合も
あるので紹介すると同時に注意を促したい。

■ CALL 命令は使えない

以前にも紹介したのだがフリー・フォーマットではCALL命令は
使えない。CALLするプログラムをD-仕様書でEXTPGMを使って
プロシージャーとして定義してそれを呼び出すようにしなければならない。

■ MOVE も使えない

MOVE命令はとはフリー・フォーマットでは使えない。

・文字フィールドどうしを右寄せでコピーする

%SUBSTを使って明示的にコピーの位置を宣言してコピーしなければならない。

・文字を数字にまたは数字を文字にコピーする

組込み関数:%CHAR または %DECを使って明示的にコピーする。

–つまりこれまでMOVEというあいまいな方法でコピーしていた命令が
許されなくなって明示的にコピーしなければならなくなった。

■ LOOKUPも使えない

フリー・フォーマットでは配列やテーブルのLOOKUP命令は使うことが
できなくなってこれに代替できるフリー・フォーマットの組込み関数はない。
従ってLOOKUPを使いたいのであれば一時的に固定様式に戻して
LOOKUPをそのまま使ったほうがよい。
ただし代替として%LOOKUPが用意されている。

■ MOVEA も使えない

MOVEAは配列とフィールドのあいだのデータを変換するのに便利な関数であるが
MOVEAもフリー・フォーマットでは使うことができない。

_

— このようにフリー・フォーマットであるからといってすべての
従来の演算命令がすべて使えるわけではない。
効率のよい記述をするには今のところ混在で記述する方法がベストである。
なおIBM RPG解説書を参照するとフリー・フォーマットでの旧来の命令の書き方が
解説されているので参考にされたい。