プロトタイプ呼び出し

プロトタイプ呼び出しでは、ユーザーは (同じ構文で) 以下を呼び出すことが できます。
  • 実行時にシステム上にあるプログラム
  • 同じプログラムまたはサービス・プログラムにバインドされている他の モジュールまたはサービス・プログラムにエクスポートされたプロシージャー
  • 同じモジュールのサブプロシージャー

呼び出しと同じモジュールにプログラムまたはプロシージャーが定義されていない場合、 呼び出しを行うプログラムまたはプロシージャーの定義仕様書にプロトタイプが含まれていなければなりません。 これはプログラムやプロシージャーを正しく呼び出し、呼び出し元が正しいパラ メーターを確実に渡すように、コンパイラーによって使用されます。

呼び出しと同じモジュールにプロシージャーが定義されている場合には、 プロトタイプを明示的に定義する必要はありません。 プロトタイプは、プロシージャーのプロシージャー・インターフェースで指定された情報を使用して、 コンパイラーが暗黙的に定義することができます。

プログラムまたはプロシージャーがプロトタイプの場合には、そのプログラム またはプロシージャーに使用するデータ項目の名前を知っている必要はなく、 パラメーターの数とタイプだけ知っていれば済みます。

プロトタイプは、プログラムまたはプロシージャー間の通信を改善します。 プロトタイプ呼び出しを使用する利点のいくつかは次のとおりです。
  • PARM または PLIST 命令が必要ないので、構文が簡単になります。
  • 一部のパラメーターでは、リテラルや式を渡すことができます。
  • プロシージャーを呼び出す場合に、操作記述子が必要かどうかを覚えてい る必要がありません。
  • 呼び出しが間違っていた場合、コンパイラーがコンパイル時にエラーを示すことによって、 正しいタイプ、形式、および長さのパラメーターを渡すのが容易になります。
  • コンパイラーが実行時に変換を実行することによって、一部のタイプのパラメーターについて正しい形式および長さのパラメーターを渡すのが容易になります。

図 1 に、プロトタイプ ProcName を使用して、3 つのパラ メーターを渡す例を示します。 プロトタイプ ProcName は、プログラムまたはプロシージャーを参照すること ができます。 呼び出しを行う時にこのことを認識しているは重要でなく、プロトタイプを定義する時にのみ重要です。

図 1. CALLP 命令の例
 /FREE
 // The following calls ProcName with the 3
 // parameters CharField, 7, and Field2:
      ProcName (CharField: 7: Field2);

 // If you need to specify operation extenders, you must also
 // specify the CALLP operation code:
      CALLP(e) ProcName (CharField: 7: Field2);
 /END-FREE

式の中でプロシージャーを呼び出す場合には、指定された戻り値のデータ・ タイプに合った方法でプロシージャー名を使用してください。例えば、プロシージャーが数値を戻すように定義された場合には、式の中での プロシージャーの呼び出しは、数値の必要な個所でなければなりません。

プログラムおよびプロシージャーの呼び出しおよびパラメーターの受け渡しの詳細 については、「Rational Development Studio for i ILE RPG プログラマーの手引き」の該当する章を参照して ください。プロトタイプおよびパラメーターの定義の詳細については、プロトタイプおよびパラメーターを参照してください。