V5R2 での変更点

V5R2 で ILE RPG に対して加えられた機能拡張について、以下にリストして記載します。
  • 文字から数値への変換

    組み込み関数 %DEC、%DECH、%INT、%INTH、%UNS、%UNSH、および %FLOAT が、文字パラメーターを使用できるように拡張されました。 例えば、%DEC('-12345.67' : 7 : 2) と指定すると、数値 -12345.67 が戻されます。

  • ビット単位の論理組み込み関数

    %BITAND、%BITOR、%BITXOR、および %BITNOT で、RPG 式内での直接ビット操作が認められるようになりました。

  • 複雑なデータ構造
    データ構造定義が拡張され、データ構造の配列、およびそれ自身がデータ構造である LIKEDS で定義されたデータ構造のサブフィールドを使用できるようになりました。 これにより、配列の配列、つまり構造の副配列が入っている構造の配列など、複雑な構造のコーディングを行えるようになりました。
    Example:   family(f).child(i).hobbyInfo.pets(p).type = 'dog';
               family(f).child(i).hobbyInfo.pets(p).name = 'Spot';
    さらに、レコード様式と同じように、 新しい LIKEREC キーワードを使用してデータ構造を定義できるようになりました。
  • 外部記述データ構造の拡張

    外部記述データ構造に、 プログラマーが選択した入力、出力、入出力、キー、またはすべてのフィールドを保持できるようになりました。 現在、外部記述データ構造に保持できるのは入力フィールドだけです。

  • キーによる入出力の拡張
    プログラマーは、次の 2 つの新しい方法で、/FREE 演算におけるキー付き入出力命令の検索引数を指定できます。
    1. リストで検索引数 (式も可能) を指定する
    2. 検索引数が入っているデータ構造を指定する
    Examples: D custkeyDS    e ds        extname(custfile:*key)
               /free
                  CHAIN  (keyA : keyB : key3) custrec;
                  CHAIN  %KDS(custkeyDS) custrec;
  • 外部記述ファイルのデータ構造結果

    外部記述ファイルに入出力操作を使うときに、 結果フィールドにデータ構造を指定できるようになりました。 この方法は、V5R2 より前ではプログラム記述ファイルでしか行えませんでした。 ファイル内のフィールド数が多い場合は、 データ構造を使用するとパフォーマンスを向上させることができます。

  • 選択フィールドのみを更新する UPDATE 操作

    UPDATE 操作により、更新するフィールドのリストを指定できるようになりました。 これは、V5R2 より前では例外出力を使用しなければ行えませんでした。

    例: update record %fields(salary:status).

  • 31 桁のサポート

    最大 31 桁のパックおよびゾーン数データをサポートします。 これは、DDS でサポートされる最大長です。V5R2 より前では 30 桁しかサポートされませんでした。

  • FEOD のパフォーマンス・オプション

    FEOD 命令が拡張され、拡張 N をサポートするようになりました。これは、この命令で、負荷の高いディスク書き出しを強制せず、ブロック化したバッファーをローカルに単に書き出すように指示します。

  • データ域アクセスの拡張

    DTAARA キーワードが拡張され、データ域の名前とライブラリーが実行時に判別できるようになりました。

  • 新しい代入演算子
    新しい代入演算子 +=、-=、*=、/=、**= により、 変数を古い値に基づいてより簡潔に変更できるようになりました。
    Example: totals(current_customer) += count;
    上記のステートメントは、 現在 "totals(current_customer)" に入っている値に "count" を追加します。 "totals(current_customer)" を 2 度コーディングする必要はありません。
  • IFS ソース・ファイル

    ILE RPG コンパイラーは、メイン・ソース・ファイルと /COPY ファイルの両方を IFS からコンパイルできるようになりました。 /COPY 指示および /INCLUDE 指示が IFS ファイル名をサポートするように拡張されました。

  • プログラム呼び出しマークアップ言語 (PCML)

    ILE RPG コンパイラーは、PCML を含む IFS ファイルを生成し、パラメーターを プログラム (CRTBNDRPG) またはエクスポートされたプロシージャー (CRTRPGMOD) に表します。

表 1. V5R1 以降に変更された言語要素
言語単位 要素 説明
組み込み関数 %DEC(式) 型を表す文字のパラメーターを取れるようになった。
%DECH(式)
%FLOAT(式)
%INT(式)
%INTH(式)
%UNS(式)
%UNSH(式)
定義仕様書キーワード DTAARA({*VAR:}データ域名) データ域名として、名前、'LIBRARY/NAME' を指定する文字リテラル、 または実行時に実際のデータ域を指定する文字変数を指定できる。
DIM データ構造の指定が可能。
LIKEDS サブフィールドの指定が可能。

EXTNAME(ファイル名{:外部レコード
名}
{:*ALL|*INPUT|*OUTPUT|*KEY}

)
オプションの "type" パラメーターを使って、 外部記述データ構造の場合にどのタイプのフィールドを取り出すかを制御する。
定義仕様書 長さおよび小数点以下の桁数の入力 パック・フィールドおよびゾーン・フィールドでは、長さおよび小数点以下の桁数として 31 まで指定できる。
命令コード CHAIN、DELETE、READE、
READPE、SETGT、SETLL
自由形式演算では、演算項目 1 にキー値のリストを指定できる。
CHAIN、READ、READC、READE、
READP、READPE、
UPDATE、WRITE
外部記述ファイルまたはレコード様式で使用する場合は、 結果フィールドにデータ構造を指定できる。
UPDATE 自由形式演算では、 最後の引数に、更新するフィールドのリストを指定できる。
FEOD 命令拡張 N を指定できる。 これは、まだ書き込まれていないバッファーはデータベースには書き込む必要があるが、 必ずしもディスクには書き込む必要がないことを示す。
演算仕様書 長さおよび小数点以下の桁数の入力 パック・フィールドおよびゾーン・フィールドでは、長さおよび小数点以下の桁数として 31 まで指定できる。
表 2. V5R1 以降の新しい言語要素
言語単位 要素 説明
代入演算子 += -= *= /= **= 代入演算子を使用する場合、演算のターゲットは演算の第 1 オペランドでもある。
制御仕様書キーワード DECPREC(30|31) 表示の場合 (例えば、%EDITC および %EDITW) の 10 進数中間値の精度を制御する。
定義仕様書キーワード

LIKEREC(内部レコード名{:*ALL|
*INPUT|*OUTPUT|*KEY})

サブフィールドがレコード様式と同じであるデータ構造を定義する。
組み込み関数 %BITAND(式 : 式) オペランドの対応するビットが両方ともオンの場合にオンであるビットの結果を戻す。
%BITNOT(式) 引数のビットとは逆のビットの結果を戻す。
%BITOR(式 : 式) オペランドの対応するビットのいずれかがオンの場合にオンであるビットの結果を戻す。
%BITXOR(式 : 式) オペランドの対応するビットの 1 つだけがオンである場合にオンであるビットの結果を戻す。
%FIELDS(名前{:名前...}) 自由形式の UPDATE で、更新するフィールドを指定する場合に使用。
%KDS(データ構造) 自由形式のキー付き命令コード CHAIN、 SETLL、SETGT、READE、および READPE で、 操作のキーがデータ構造内にあることを示す場合に使用。