プロトタイプ呼び出し
- 呼び出しがバインド (プロシージャー) または動的 (プログラム) であるか どうか
- プログラムまたはプロシージャー (外部名) の検索方法
- パラメーターの数および特質
- パラメーターが渡す必要があるものかどうか、任意に渡されるものかどう か
- 操作記述子が渡されたかどうか (プロシージャーの場合)
- 戻り値 (ある場合) のデータ・タイプ (プロシージャーの場合)
プロトタイプは、プログラムまたはプロシージャーを正しく呼び出すため、 さらに呼び出し元が正しいパラメーターを渡したことを確認するために、コンパイ ラーによって使用されます。 図 1 は、レコードの各種フィールドを読み取り可能な形式に様式設定するプロシージャー FmtCust のプロトタイプを示しています。これには 2 つの出力パラメーターがあります。
// プロシージャー FmtCust のプロトタイプ (定義仕様書の PR に
// 注意してください)。これには 2 つの出力パラメーターがあります。
D FmtCust PR
D Name 100A
D Address 100A
アドレスを様式設定するため、アプリケーションはプロシージャー FmtAddr を呼び出します。 FmtAddr には複数の入力パラメーターがあり、 可変文字フィールドを戻します。 図 2 は FmtAddr のプロトタイプを示しています。
//---------------------------------------------------------
// FmtAddr - アドレスを様式設定するためのプロシージャー
//---------------------------------------------------------
D FmtAddr PR 100A VARYING
D streetNum 10I 0 CONST
D streetName 50A CONST
D city 20A CONST
D state 15A CONST
D zip 5P 0 CONST
プロシージャーが呼び出しと同じモジュールにコーディングされた場合は、プロトタイプの指定は任意です。 プロトタイプが指定されていないと、コンパイラーはプロシージャー・インターフェースからプロトタイプを生成します。 ただし、プロシージャーがエクスポートされ、かつ別の RPG モジュールまたはプログラムからも呼び出される場合は、コピー・ファイルでプロトタイプを指定し、そのコピー・ファイルを呼び出しモジュールとプロシージャーをエクスポートするモジュールとの両方にコピーするようにしてください。
プログラムまたはプロシージャーがプロトタイプの場合には、CALLP で、ある いは戻り値で使用したい場合は式で、これを呼び出します。 プロトタイプの名前に続くリストに パラメーターを渡します。例えば、名前 (パラメーター 1 : パラメーター 2 : …) です。
図 3 は FmtCust への呼び出しを示します。図 1 で示された OUTPUT パラメーター の名前は CALL ステートメントのものと一致しないことに注意してください。 プロトタイプのパラメーター名は文書化の目的だけのものです。 プロトタイプは、呼び出しインターフェースの属性を記述する のに役 立ちます。 呼び出しパラメーターの実際の定義は、プロシージャー自身の内部で実行され ます。
C CALLP FmtCust(RPTNAME : RPTADDR)
- 実行時にシステム上にあるプログラム
- 同じプログラムまたはサービス・プログラムにバインドされた、他のモジ ュールまたはサービス・プログラム内のエクスポートされたプロシージャー
- 同じモジュール内のサブプロシージャー
FmtCust は FmtAddr を呼び出してアドレスを様式設定します。 FmtCust は戻り値を使用する必要があるために、 FmtAddr への呼び出しは式の中で行われます。 図 4 はこの呼び出しを示しています。
//--------------------------------------------------------------
// FmtAddr プロシージャーを呼び出してアドレスを処理します。
//--------------------------------------------------------------
Address = FmtAddress (STREETNUM : STREETNAME :
CITY : STATE : ZIP);
- プロトタイプ・パラメーターは、次の複数の方法で渡すことができます。 参照によって、値によって (プロシージャーの場合のみ)、または読み取り専用 の参照によって、渡すことができます。RPG のデフォルトの方法は参照によって渡すことです。 しかし、値によってまたは読み取り専用参照によって渡すことは、渡すパラメー ターに多くのオプションを与えます。
- プロトタイプが、指定のパラメーターに使用可能であることを指示している
場合には、次の 1 つ以上を実行できる場合があります。
- *OMIT を渡す
- パラメーター全体をそのままにしておく
- 指定されているよりも短いパラメーターを渡す (文字と図形パラメーター の場合、および配列パラメーターの場合)