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)" を 2 度のコーディングを必要としないで、現在 "totals(current_customer)" にある値に "count" を追加します。
  • IFS ソース・ファイル

    ILE RPG コンパイラーは、IFS のメイン・ソース・ファイルと /COPY ファイルの両方をコンパイルできます。/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}

)
オプションの「タイプ」パラメーターは、外部記述データ構造のどのタイプのフィールドを抽出するかを制御します。
定義仕様書 長さと小数部の桁数入力 パック・フィールドおよびゾーン・フィールドでは、長さおよび小数点以下の桁数として 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(expression : expression) オペランドの対応するビットが両方ともオンである場合、ビットがオンである結果を戻します。
%BITNOT(式) ビットが引数内のビットの逆である結果を戻します。
%BITOR(expression : expression) オペランド内の対応するビットのいずれかがオンである場合、ビットがオンである結果を戻します。
%BITXOR(expression : expression) オペランド内の対応するビットのちょうど 1 つがオンである場合、ビットがオンである結果を戻します。
%FIELDS(name {:name... }) 自由形式の UPDATE で、更新するフィールドを指定する場合に使用。
%KDS(data structure) 自由形式のキー付き命令コード CHAIN、 SETLL、SETGT、READE、および READPE で、 操作のキーがデータ構造内にあることを示す場合に使用。