7.1 での変更点

この節では、7.1 の ILE RPG における機能強化について説明します。

データ構造配列のソートおよび検索

いずれかのサブフィールドをキーとして使用して、データ構造配列をソートおよび検索することができます。

     // Sort the custDs array by the amount_owing subfield
     SORTA custDs(*).amount_owing;

     // Search for an element in the custDs array where the
     // account_status subfield is "K"
     elem = %LOOKUP("K" : custDs(*).account_status);
昇順または降順の配列のソート

SORTA(A) を使用して昇順に、または SORTA(D) を使用して降順に配列をソートできます。 順序配列 (ASCEND キーワードまたは DESCEND キーワード) をこの配列にすることはできません。

     // Sort the salary array in descending order
     SORTA(D) salary;
新しい組み込み関数の %SCANRPL (走査および置換)

%SCANRPL 組み込み関数は、ストリングにおける特定の値のすべての出現を走査して、それらを別の値に置換します。

     // Replace NAME with 'Tom'
     string1 = 'See NAME. See NAME run. Run NAME run.';
     string2 = %ScanRpl('NAME' : 'Tom' : string1);
     // string2 = 'See Tom. See Tom run. Run Tom run.'
%LEN(varying : *MAX)

%LEN 組み込み関数を使用して、可変長の文字フィールド、UCS-2 フィールド、または図形フィールドの最大文字数を取得することができます。

外部記述データ構造における ALIAS の名前の使用

定義仕様書で ALIAS キーワードを使用して、外部記述データ構造のサブフィールドに代替名を使用することを指示します。 ファイル仕様書で ALIAS キーワードを使用して、ファイルのレコードから定義された LIKEREC データ構造に代替名を使用することを指示します。

     A          R CUSTREC
     A            CUSTNM        25A         ALIAS(CUSTOMER_NAME)
     A            CUSTAD        25A         ALIAS(CUSTOMER_ADDRESS)
     A            ID            10P 0

     D custDs        e ds                  ALIAS
     D                                     QUALIFIED EXTNAME(custFile)
      /free
        custDs.customer_name = 'John Smith';
        custDs.customer_address = '123 Mockingbird Lane';
        custDs.id = 12345;
戻り値の高速化

RTNPARM キーワードを指定して定義されたプロシージャーは、隠されたパラメーターとして戻り値を処理します。 非常に大きな値、特に非常に大きな可変値を戻すようにプロシージャーがプロトタイプ化されている場合、 RTNPARM キーワードを指定してプロシージャーを定義することによって、それを呼び出すパフォーマンスを著しく向上させることができます。

     D getFileData     pr              a   varying len(1000000)
     D                                     rtnparm
     D   file                          a   const varying len(500)
     D data            S               a   varying len(1000)
      /free
         data = getFileData ('/home/mydir/myfile.txt');
%PARMNUM 組み込み関数

%PARMNUM(parameter_name) 組み込み関数は、パラメーター・リストにおけるパラメーターの序数を戻します。 プロシージャーが RTNPARM キーワードを指定してコーディングされている場合に、この組み込み関数の使用が特に重要になります。

     D                 pi
     D   name                       100a   const varying
     D   id                          10i 0 value
     D   errorInfo                         likeds(errs_t)
     D                                     options(*nopass)
      /free
        // Check if the "errorInfo" parameter was passed
        if %parms >= %parmnum(errorInfo);
オプションのプロトタイプ
プログラムまたはプロシージャーが別の RPG モジュールによって呼び出されない場合、プロトタイプの指定はオプションです。 次のタイプのプログラムおよびプロシージャーでは、プロトタイプを省略できます。
  • 出口プログラムとして、またはコマンドのコマンド処理プログラムとしてのみ使用するプログラム
  • 別のプログラミング言語から呼び出されることのみを意図したプログラム
  • モジュールからエクスポートされないプロシージャー
  • モジュールからエクスポートされるが、別のプログラミング言語から呼び出されることのみを意図したプロシージャー
任意タイプのストリング・パラメーターの受け渡し
値によってまたは読み取り専用参照によって渡されたストリング・パラメーターに対して、暗黙の変換が行われます。 例えば、CONST UCS-2 パラメーターを含むようにプロシージャーをプロトタイプ化して、 プロシージャー呼び出し時のパラメーターとして文字式を渡すことができます。 これによって、UCS-2 タイプでプロトタイプ化されたパラメーターと戻り値を使用した 1 つのプロシージャーを作成することができます。 このプロシージャーを呼び出す場合、任意のタイプのストリング・パラメーターを渡して、戻り値を任意のタイプのストリング変数に代入することができます。
     // The makeTitle procedure upper-cases the value
     // and centers it within the provided length
     alphaTitle = makeTitle(alphaValue : 50);
     ucs2Title = makeTitle(ucs2Value : 50);
     dbcsTitle = makeTitle(dbcsValue : 50);
XML-INTO の新しい 2 つのオプション
  • datasubf オプションを使用すると、属性も指定された XML 要素のテキスト・データを受け取るサブフィールドを指定することができます。
  • countprefix オプションを使用すると、 allowmissing=yes オプションを指定する必要性が減ります。 これは、XML-INTO 命令で設定された RPG 配列要素または非配列サブフィールドの数を受け取る、追加サブフィールドの名前の接頭部を指定します。

これらのオプションは、6.1 の PTF でも利用可能です。

テラスペース記憶域モデル

変更の始まりRPG モジュールおよびプログラムは、テラスペース記憶域モデルを使用するように、または呼び出し元の記憶域モデルを継承するように作成することができます。 テラスペース記憶域モデルを使用すると、自動記憶域に関するシステムしきい値が単一レベル記憶域モデルの場合と比べて大幅に高くなります。 単一プロシージャーの自動記憶域の量に関する限度と、呼び出しスタック上の全プロシージャーの自動記憶域の合計に関する限度があります。変更の終わり

CRTRPGMOD コマンドまたは CRTBNDRPG コマンドで記憶域モデル (STGMDL) パラメーターを使用するか、 制御仕様書で STGMDL キーワードを使用します。
*TERASPACE
プログラムまたはモジュールは、テラスペース記憶域モデルを使用します。
*SNGLVL
プログラムまたはモジュールは、単一レベル記憶域モデルを使用します。
*INHERIT
プログラムまたはモジュールは、呼び出し元の記憶域モデルを継承します。
CRTBNDRPG コマンドの ACTGRP パラメーター、および制御仕様書の ACTGRP キーワードに対する変更

ACTGRP パラメーターおよび ACTGRP キーワードのデフォルト値が、QILE から *STGMDL に変更されました。

ACTGRP(*STGMDL) は、活動化グループがプログラムの記憶域モデルに依存することを指定します。 記憶域モデルが *TERASPACE の場合、ACTGRP(*STGMDL) は ACTGRP(QILETS) と同じです。 それ以外の場合、ACTGRP(*STGMDL) は ACTGRP(QILE) と同じです。

注: 活動化グループがプログラムに割り当てられるデフォルトの方法は、ACTGRP パラメーターおよび ACTGRP キーワードに対するこの変更によって影響されません。 STGMDL パラメーターおよび STGMDL キーワードのデフォルト値は *SNGLVL です。 そのため、ACTGRP パラメーターまたは ACTGRP キーワードが指定されない場合、プログラムの活動化グループは、前のリリースと同様、デフォルトで QILE になります。
テラスペース記憶域の割り振り

制御仕様書の ALLOC キーワードを使用して、モジュールの RPG 記憶域管理命令が、テラスペース記憶域または単一レベル記憶域のどちらを使用するかを指定します。 テラスペース記憶域割り振りの最大サイズのほうが、単一レベル記憶域割り振りの最大サイズより、著しく大きくなります。

リスト・デバッグ・ビューの暗号化

モジュールのリスト・デバッグ・ビューが暗号化されると、 デバッグ・セッションでデバッグの実行者が暗号鍵を知っている場合にのみリスト・ビューを表示可能になります。 これにより、顧客がリスト・ビューを通してソース・コードを参照できてしまうことがないようにして、デバッグ可能プログラムを顧客に送ることができるようにします。 CRTRPGMOD コマンド、CRTBNDRPG コマンド、または CRTSQLRPGI コマンドの DBGENCKEY パラメーターを使用します。

表 1. 6.1 以降に変更された言語要素
言語単位 要素 説明
制御仕様書キーワード ACTGRP(*STGMDL) ACTGRP のキーワードおよびコマンド・パラメーターの新しいデフォルトは、*STGMDL です。 プログラムがテラスペース記憶域モジュールを使用する場合、活動化グループは QILETS です。 それ以外の場合は、QILE です。
組み込み関数 %LEN(可変長フィールド : *MAX) これを使用して、可変長フィールドの文字の最大数を取得できるようになりました。
命令コード SORTA(A | D) SORTA 命令コードで命令拡張の A と D を使用できるようになりました。配列を昇順 (A) にソートするか、降順にソートするか (D) を指示します。
表 2. 6.1 以降の新規言語要素
言語単位 要素 説明
制御仕様書キーワード STGMDL(*INHERIT | *TERASPACE | *SNGLVL) モジュールまたはプログラムの記憶域モデルを制御します。
ALLOC(*STGMDL | *TERASPACE | *SNGLVL) 記憶域管理命令 %ALLOC、
%REALLOC、DEALLOC、
ALLOC、REALLOC の記憶域モデルを制御します。
ファイル仕様書のキーワード ALIAS LIKEREC キーワードで定義されたデータ構造のサブフィールドに対して代替フィールド名を使用します。
定義仕様書キーワード ALIAS 外部記述データ構造のサブフィールドに対して代替フィールド名を使用します。
RTNPARM 隠されたパラメーターとしてプロシージャーの戻り値を処理することを指定します。
組み込み関数 %PARMNUM パラメーター・リストにおけるパラメーターの序数を戻します。
%SCANRPL ストリングにおける特定の値のすべての出現を走査して、それらを別の値に置換します。
XML-INTO のオプション datasubf 属性も指定された XML 要素のテキスト・データを受け取るサブフィールドを指定します。
countprefix XML-INTO 命令で設定された RPG 配列要素または非配列サブフィールドの数を受け取る、追加サブフィールドの名前の接頭部を指定します。