V3R6/V3R2 での変更点
V3R1 以降の RPG IV の主な拡張機能は、1 つのモジュールを複数のプロシージャーを使用してコーディングする機能です。 これは何を意味するでしょう? 簡単に言えば、1 つのモジュールを 1 つ以上のプロトタイプ・プロシージャーを使用してコーディングできることを意味します。この場合、プロシージャーは RPG サイクルを使用しないで戻り値を持ち、実行することができます。
1 つのモジュールを複数のプロシージャーを使用して作成すると、 作成するアプリケーションの機能を高めることができます。すべてのアプリケーションは、特定のタスクを実行すると考えられる一連の論理単位から構成されます。 柔軟性を保持してアプリケーションを開発するには、各論理単位をできるだけ独立させることが重要です。 各単位を独立させることによって、 以下のことが可能になります。
- 特定のタスクを実行する視点から各単位を作成しやすくなります。
- 変更できるように設計したデータ・オブジェクト以外のデータ・オブジェクトを変更する可能性が少なくなります。
- 論理およびデータ項目をより個別化できるので、デバッグが容易になります。
- 変更が必要なアプリケーションの部分を容易に分離できるので、保守が容易になります。
複数のプロシージャーを使用して 1 つのモジュールをコーディングする主な利点は、 モジュラー・アプリケーションのコーディングの制御が容易になり、効率が上がることです。 この利点はいくつかの方法で実現することができます。 以下を行うことができます。
- 同じ呼び出し命令および構文を使用してプロシージャーおよびプログラムを呼び出す。
- 呼び出しインターフェースのコンパイル時に検査を行うプロトタイプを定義する。
- 値によって、または参照によってパラメーターを渡す。
- 値を戻すプロシージャーを定義し、式の中でそのプロシージャーを呼び出す。
- 変数のローカル定義を実行することによって、データ項目へのアクセスを制限する。
- サイクルを使用しないモジュールをコーディングする。
- プロシージャーを回帰的に呼び出す。
モジュール内のメイン・プロシージャーの実行時の動作は、V3R1 プロシージャーの場合と同じです。 それ以降のプロシージャーの実行時の動作は、V3R1 プログラムとはいくらか異なります。プロシージャーの最後および例外処理の領域で特に異なります。 これらの相違点は、これらのプロシージャーについてはサイクル・コードが生成されないために生じます。
他の拡張は、このリリースについても行われています。次のような機能強化がなされました。
- 2 つの新しい整数データ・タイプ、符号付き整数 (I) と符号なし整数 (U) のサポート
整数データ・タイプによって、2 進データ・タイプより広い範囲の値を使用することができます。 整数データ・タイプは、整数計算のパフォーマンスを向上することもできます。
- MOVE、MOVEL、および TEST 命令の *CYMD サポート
既にこのデータ形式であるシステム値を処理するために、特定の命令の中で *CYMD 日付形式を使用できるようになりました。
- 制御仕様書の COPYRIGHT
キーワードを使用して、プログラムおよびモジュールの版権を示す機能
このキーワードを使用して指定した版権情報は、DSPMOD、DSPPGM、または DSPSRVPGM 情報の一部になります。
- キーワード BLOCK を使用するレコードのブロック化のユーザー制御
DISK または SEQ ファイルに SETLL、SETGT、または CHAIN 命令が使用されている場合でも、ファイルのレコードのブロック化を要求することができます。 ブロック化を実行しないように要求することもできます。 このような場合でのブロック化の使用によって、実行時のパフォーマンスがかなり向上する可能性があります。
- PREFIX 機能の改善
ファイル記述および定義仕様書に関する PREFIX キーワードへの変更によって、既存のフィールド名内の文字を接頭部ストリングで置換できるようになりました。
- トリガー・プログラム・エラーに関する状況コード
トリガー・プログラム・エラーを示すために 2 つの状況コード 1223 および 1224 が追加されました。
以下の表に、影響を受ける言語の部分別に、変更のあった言語要素と新しい言語要素を 要約します。
| 言語単位 | 要素 | 説明 |
|---|---|---|
| ファイル仕様書のキーワード | PREFIX(接頭部ストリング {:置換する文字数}) | フィールド名に対するストリングの接頭部を付けること、またはフィールド名の部分的な変更を可能にします。 |
| 定義仕様書キーワード | CONST{(定数)} | 名前付き定数の値を指定するか、または参照によって渡されるプロトタイプ・パラメーターが定数値を持っていることを示します。 |
| PREFIX(接頭部ストリング {:置換する文字数}) | フィールド名に対するストリングの接頭部を付けること、またはフィールド名の部分的な変更を可能にします。 | |
| 命令コード | RETURN | 呼び出し元に制御を戻し、指定されている場合は、値を戻します。 |
| 言語単位 | 新規 | 説明 |
|---|---|---|
| 制御仕様書キーワード | COPYRIGHT('版権ストリング') | 版権情報をモジュールおよびプログラムに関連付けることができるようにします。 |
| EXTBININT{(*NO | *YES)} | プログラム処理中に、外部記述ファイル内の 2 進数フィールドに整数形式を割り当ていることを指定します。 | |
| NOMAIN | モジュールにサブプロシージャーのみがあることを示します。 | |
| ファイル仕様書のキーワード | BLOCK(*YES |*NO) | レコードのブロック化の発生を制御できるようにします (他の条件が満たされた場合) |
| 定義仕様書キーワード | ALIGN | 整数フィールドまたは符号なしフィールドの位置合わせを行うかどうかを指定します。 |
| EXTPGM(名前) | プロトタイプ・プログラムの外部名を示します。 | |
| EXTPROC(名前) | プロトタイプ・プロシージャーの外部名を示します。 | |
| OPDESC | プロトタイプ・バインド呼び出しで、操作記述子を渡すかどうかを指定します。 | |
| OPTIONS(*NOPASS *OMIT *VARSIZE) | プロトタイプ・パラメーターに関する各種のオプションを指定します。 | |
| STATIC | ローカル変数が静的記憶域を使用するように指定します。 | |
| VALUE | プロトタイプ・パラメーターを値によって渡すように指定します。 | |
| 組み込み関数 | %PARMS | 呼び出しで渡すパラメーターの個数を戻します。 |
| 命令コード | CALLP | プロトタイプ・プログラムまたはプロシージャーを呼び出します。 |
| 仕様書タイプ | プロシージャー仕様書 | サブプロシージャー定義の先頭と終端を示します。 |
| 定義のタイプ | PR | プロトタイプ定義の先頭を示します。 |
| PI | プロシージャー・インターフェース定義の先頭を示します。 | |
| 24~25 桁目のブランク | プロトタイプ・パラメーターを定義します。 |