V3R7 での変更点

V3R6 以降の RPG IV の主な拡張機能は、データベース・ヌル値フィールドに対する新規サポートと、式の中間結果の精度をさらに厳密に制御する機能です。 それ以外の拡張機能としては、浮動小数点データ・タイプの追加や、null 文字で終了するストリングのサポートなどが含まれます。 これらの拡張機能によって、オペレーティング・システムおよび ILE 言語間通信との統合に関して、RPG 製品がさらに改善されました。 これは、アプリケーション開発における柔軟性が大きく向上する ということです。

以下は、これらの拡張機能 (いくつかの新しい組み込み関数と使用可能度の強化 も含む) をリストしたものです。
  • データベース・ヌル値フィールドのサポート

    この拡張機能によって、ヌル値可能フィールドに ヌル値があるかどうかをテストし、そのフィールドをヌル値 に設定できるようにすることにより、ユーザーが、ヌル値可能フィールドを 含むデータベース・ファイルを処理できるようになります。

  • 式中間結果の精度

    フリー・フォームで表現される仕様書における新しい制御仕様書キーワードおよび新しい命令コード・拡張によって、ユーザーが、中間結果の精度をより厳密に制御することができるようになります。

  • 新しい浮動小数点データ・タイプ

    新しい浮動小数点データ・タイプには、他のデータ・タイプより 広い範囲の値があります。このデータ・タイプが追加されたことで、 データベースの統合が進み、ILE 環境内における言語間通信、特に C および C++ 言語との通信が向上されます。

  • NULL 文字で終了するストリングのサポート

    ヌル文字で終了するストリングを新しくサポートすることに より、言語間通信が向上しました。 このサポートにより、ユーザーは、ヌル文字で終了するストリング を定義、処理し、これを予期する プロシージャーにパラメーターとして文字データを簡便に渡す ことができるようになり、ヌル文字で終了するストリングを 完全に制御できるようになりました。

  • ポインターの加算および減算

    自由形式の式の機能が強化され、ポインターにオフセットを 加えたり、ポインターからオフセットを引いたり、また、2 つのポインター 間の差を求めることができるようになりました。

  • ロング・ネームのサポート

    10 文字よりも長い名前が、RPG 言語に追加されました。 定義仕様書または プロシージャー仕様書で定義されたものにはロング・ネームを 付けることができ、これらの名前は、記入項目の範囲内であればどこでも使用することができます。 さらに、自由形式仕様書で 参照される名前は、複数の行に連続する 場合があります。

  • 新しい組み込み関数
    この言語に新しい組み込み関数がいくつか追加され、それにより、以下の言語機能が向上しました。
    • 編集 (%EDITW、%EDITC、%EDITFLT)
    • 走査ストリング (%SCAN)
    • 型変換 (%INT、%FLOAT、%DEC、%UNS)
    • 四捨五入によるタイプ変換 (%INTH、%DECH、%UNSH)
    • 10 進数の式の場合の中間結果の精度 (%DEC)
    • 変数および式の 10 進数の長さ (%LEN, %DECPOS)
    • 絶対値 (%ABS)
    • ヌル値可能フィールドの設定およびテスト (%NULLIND)
    • ヌル文字で終了するストリングの取り扱い (%STR)
  • 条件付きコンパイル
    RPG IV は、条件付きコンパイルをサポートするように拡張されています。 このサポートには以下の内容が含まれます。
    • 条件の定義 (/DEFINE、/UNDEFINE)
    • 条件のテスト (/IF、/ELSEIF、/ELSE、/ENDIF)
    • 現行ソース・ファイルの読み取りの停止 (/EOF)
    • CRTBNDRPG および CRTRPGMOD コマンドで最高 32 までの条件を 定義するための新しいコマンド・オプション (DEFINE)
  • データ拡張

    データ処理命令を向上するために、いくつかの拡張が行われました。 TIME 命令コードは、結果フィールド内の日付、時刻、またはタイム・スタンプの 各フィールドをサポートするように拡張されています。文字フィールドとの間で日付または時刻を転送する場合に、 区切り記号が必要なくなりました。UDATE および *DATE フィールドの転送に、形式コードを 指定する必要はなくなりました。 日付フィールドは、定義仕様書のシステム (*SYS) またはジョブ (*JOB) の 日付に初期化することができます。

  • 代替照合順序による文字比較

    特定の文字変数を、代替照合順序が比較で使用されないように 定義することができます。

  • ネストされた /COPY メンバー

    /COPY 指示のネストが可能になりました。 すなわち、/COPY メンバー に 1 つ (または複数) の /COPY 指示を含め、 その指示にさらに別の /COPY 指示を含めるというようにすることができます。

  • 記憶域管理

    新しい記憶管理命令コードを使用して、記憶域の割り振り、再割り振り、 および割り振り解除が動的に行えるようになりました。

  • 記憶管理および浮動アンダーフローのエラーの状況コード

    記憶管理エラーを示すための状況コードが 2 つ (425 および 426) 追加 されました。 また、中間浮動結果が小さ過ぎることを示すための状況コード 104 も 追加されています。

次の表は、影響を受けた言語の部分に基づいて、変更された言語要素および新 しい言語要素を要約したものです。

表 1. V3R6 以降に変更された言語要素
言語単位 要素 説明
定義仕様書キーワード ALIGN 以前にサポートされている整数および符号なしの位置合わせに 加え、浮動サブフィールドの位置合わせをするために、ALIGN が 使用できるようになりました。
  OPTIONS (*NOPASS *OMIT *VARSIZE *STRING) *STRING オプションによって、ヌル文字で終了するストリング として文字値を渡すことができます。
レコード・アドレス・タイプ F (浮動形式) ファイル仕様書で使用可能なレコード・アドレス・タイプ のリストに追加されました。 プログラム記述ファイルについての浮動処理をシグナルします。
内部データ・タイプ F (浮動形式) 定義仕様書で使用可能な内部データ・タイプのリストに追加されました。 浮動小数点独立フィールド、パラメーター、または データ構造サブフィールドを定義します。
データ形式 F (浮動形式) プログラム記述ファイルの入力仕様書 および出力仕様書で 使用可能なデータ形式のリストに追加されました。
表 2. V3R6 以降の新しい言語要素
言語単位 新規 説明
制御仕様書キーワード COPYNEST('1-2048') /COPY 指示のネストのための最大の深さを指定します。
  EXPROPTS(*MAXDIGITS | *RESDECPOS) 精度のタイプの式オプション (デフォルト値または「結果の 小数点以下の桁数」精度規則)
  FLTDIV {(*NO | *YES) } 式の中のすべての除算命令が浮動小数点で計算される ことを示します。
定義仕様書キーワード ALTSEQ(*NONE) 代替照合順序が指定されている場合でも、文字比較に 通常の照合順序を使用することを強制します。
組み込み関数 %ABS パラメーターとして指定されている数値式の絶対値を戻します。
  %DEC および %DECH 数値式の値を、パラメーターとして指定されている 桁数および小数点以下の桁数を持つ 10 進 (パック) 形式に変換します。 %DECH は %DEC と同じですが、四捨五入が適用されます。
  %DECPOS 数値変数または数値式の小数点以下の桁数を戻します。 戻り値は定数で、定数が 予期されているところに使用されます。
  %EDITC この関数は、編集コードに従って編集された数値を表す 文字結果を戻します。
  %EDITFLT 数値式の値を、浮動の文字外部表示表現に変換します。
  %EDITW この関数は、編集語に従って編集された数値を表す 文字結果を戻します。
  %FLOAT 数値式の値を、浮動形式に変換します。
  %INT および %INTH 数値式の値を、整数に変換します。 10 進数はすべて %INT によって 切り捨てられ、%INTH によって丸められ ます。
  %LEN 変数式の数字または文字の数を戻します。
  %NULLIND ヌル値可能フィールドのヌル標識を照会または設定するために 使用されます。
  %SCAN ソース・ストリングの中の検索引数の 1 桁目、または それが見付からない場合には 0 を戻します。
  %STR ヌル文字で終了するストリングを作成または使用するために 使用します。このストリングは、C および C++ アプリケーションで 非常に一般的に使用されています。
  %UNS および %UNSH 数値式の値を符号なし形式に変換します。 10 進数はすべて %UNS によって 切り捨てられ、%UNSH によって丸められ ます。
命令コード拡張 N DEALLOC が正常に行われた後、 ポイントを *NULL に設定します。
  M デフォルトの精度規則
  R 小数点以下の桁数が、結果の小数点以下の桁数より少ない中間値は なくなります ("結果の小数点以下の桁数" 精度の規則)。
命令コード ALLOC 記憶域を動的に割り振るために使用します。
  DEALLOC 記憶域を動的に割り振り解除するために使用します。
  REALLOC 記憶域を動的に再割り振りするために使用します。