修飾子 inOut または out (参照型に基づいていないパラメーターの場合に可能) を指定すると、パラメーター値に加えた変更が、呼び出し側関数で使用可能になります。 これらの修飾子については、後でinOut とそれに関連する修飾子の影響のセクションで説明します。 参照型の扱いについて詳しくは、『EGL における参照変数と NIL』を参照してください。
パラメーターは、他の関数への引数として受け渡すことが可能です。 それ以外の面では、パラメーターは、パラメーターを含む関数が呼び出した関数からは、不可視です。
大括弧 ([]) で終了するパラメーターは動的配列であり、 その他の指定はその配列の各要素の性質を宣言します。
ライブラリー関数はレコードの状態を受け取りません。
inOut 修飾子が必要になるのは、パラメーターがフィールドであり、 修飾子 field を指定した場合です。 後者の修飾子は、パラメーターが blanks や numeric など、テスト可能なフォーム・フィールド属性を持つことを示します。
有限長ストリングを、修飾子が out である関数仮パラメーターとして指定する場合、長さの制限は、引数およびパラメーターの両方で同じである必要があります。
inOut 修飾子が有効でない場合は、関連する引数は、『EGL での参照の互換性』での説明のとおり、パラメーターと参照の互換性がある必要があります。
field 修飾子を持つフィールドに in 修飾子を使用することはできません。 また、現行の関数の中、または現行の関数によって呼び出される関数の中でファイルまたはデータベースにアクセスするために使用されるレコードに in 修飾子を指定することもできません。
引数がリテラルまたは定数である場合、引数は修飾子 in が有効である場合とまったく同じように扱われます。
field 修飾子を持つパラメーターに out 修飾子を使用することはできません。 また、現行の関数の中、または現行の関数によって呼び出される関数の中でファイルまたはデータベースにアクセスするために使用されるレコードに out 修飾子を指定することもできません。
有限長ストリングを、 修飾子が out である関数仮パラメーターとして指定する場合、 長さの制限は、引数およびパラメーターの両方で同じである必要があります。
サービスにおいては、パラメーターの型が ANY、BLOB、または CLOB をとることはできません。
パラメーターがプリミティブ型と長さの数値を受け入れるようにする場合、loose type として NUMBER を使用します。この場合、 パラメーターに渡される数値は小数点以下の桁を持たない必要があります。
特定のプリミティブ型であるが、 任意の長さのストリングをパラメーターが受け入れるようにする場合は、CHAR、DBCHAR、MBCHAR、HEX、または UNICODE を loose type として指定し、引数が対応するプリミティブ型であることを確認します。
引数の定義によって、関数の文が loose type のパラメーターで動作するときに何が発生するかが決定されます。
loose type は、ライブラリー またはサービスに宣言される関数には使用できません。
プリミティブ型の詳細については、『プリミティブ型』を参照してください。
field 修飾子を使用できるのは、inOut 修飾子を指定した場合か、デフォルトで inOut 修飾子を受け入れた場合だけです。
field 修飾子は、nativeLibrary 型のサービス内またはライブラリー内の関数パラメーターには使用できません。
関数が basicInterface 型のサービス・パーツまたはインターフェース・パーツに属する場合は、 第 2 のケースのみが該当します。 これは、ビルド記述子オプション itemsNullable が常に no に設定されるからです。
program inoutpgm a int; b int; c int; function main() a = 1; b = 1; c = 1; func1(a,b,c); // a = 1 // b = 3 // c = 3 end function func1(x int in, y int out, z int inout) // a = 1 x = 1 // b = 1 y = 0 // c = 1 z = 1 x = 2; y = 2; z = 2; // a = 1 x = 2 // b = 1 y = 2 // c = 2 z = 2 func2(); func3(x, y, z); // a = 1 x = 2 // b = 1 y = 3 // c = 3 z = 3 end function func2() // a = 1 // b = 1 // c = 2 end function func3(q int in, r int out, s int inout) // a = 1 x = 未解決 q = 2 // b = 1 y = 未解決 r = 2 // c = 2 z = 未解決 s = 2 q = 3; r = 3; s = 3; // a = 1 x = 未解決 q = 3 // b = 1 y = 未解決 r = 3 // c = 3 z = 未解決 s = 3 end