ILE RPGによる簡単モダナイゼーション②|非常に便利な命令語EVALを活用しよう!

RPG ⅢプログラマーがILE RPGプログラムに慣れるために、簡単で便利なコーディング手法を紹介します。前回(ILE RPGによる簡単モダナイゼーション❶|RPG ⅢプログラマーのためのILE RPG入門)の記事で、RPG ⅢのソースをILE RPGに変換し、そのままコンパイルして実行できることはご理解いただけたと思います。

しかし、そのままのソースでは、ILE RPGを活用できているとは言えません。ILE RPGになって多くの機能が利用できるようになっていますので、この中からすぐに利用できる機能をいくつか紹介していきます。

命令コードEVAL

ILE RPGになって、EVALという命令語が追加されました。これは大変便利な命令で、今後関数などの新機能を利用するためには必ず必要となる命令語になります。さらに、従来の固定形式からフリー形式に移行する際にも有効なので、まず最初に習得しておきましょう。

重要な注意点として、EVALでは変数定義ができません。従来MOVEなどの結果フィールドを同じ行で定義することができましたが、EVALではできないので、使用するフィールドは定義仕様書(D仕様書)で事前に定義しておきましょう。もちろん、MOVEなど従来の命令の行とEVALが混在することは問題ありません。

演算命令 EVAL

EVALは従来のRPG命令語のMOVEやADDなどの演算と同等のものですが、大きな違いは式をそのまま記述できる点です。

EVALでは項目1は使いません。演算命令にEVALを記述し、演算項目2の先頭からコメントエリアの直前までの範囲を、式の記述として利用できます。

演算命令 EVAL

式の記述エリアが広がったことで、「神奈川県海老名市国分寺台」といった長い文字列なども簡単にセットできるようになります(1行目)。2・3行目は単純な数値計算で、RPG Ⅲの場合は計算単位ごとに命令が必要でしたが、EVALは数式をそのまま使うことができるので、4行目のようなコーディングが可能となります。5行目はカウントアップ、6行目はMOVE、MOVELの対比となります。

 

EVALにおける文字列操作

RPG ⅢでMOVEやMOVELで文字列操作を行っていた場合、単純にEVALに変更するだけでは対応できない場合はあるので、注意する必要があります。

従来のMOVE命令の場合、

MOVE=右詰めでセット
MOVEL=左詰めでセット
EVALの場合
EVAL=左詰めセット
EVALR=右詰めセット

となります。

さらに、EVAL命令ではターゲット文字列がクリアーされてからセットされるという事に注意してください。

演算仕様書 EVAL の活用

演算命令 EVAL

1・2行目を3・4行のEVALに置き換えてしまうと、4行目の結果が2行目とは異なってしまいます。このケースのコーディングの場合、5行目のようにまとめてコーディングすることで正しい結果を出すことができます。

また、MOVE命令は数値フィールドを文字フィールドへ、または文字フィールドから数値フィールドへ代入することができましたが、EVALでは、式の右辺と左辺のフィールド属性が同じでなければなりません(コンパイル・エラーが発生します)。ILEでこのようなフィールド属性を変換するためには、関数を使用することで解消できますし、使い勝手もMOVEよりも改善されています。

関連関数
%CHAR (文字データへの変換)
%DEC (パック10 進数への変換)
%INT (整数形式への変換)

文字から整数数値への変換%INT ~MOVEの使用

文字から整数数値への変換%INT ~関数 %INT の使用

EVAL命令は、このように式をそのまま記述できる点で、PRGⅢにはなかったコーディングを実現します。また、このコーディングは他の言語では標準的になっているので、他言語の経験者にもわかりやすくなります。

関連資料をダウンロード!