修飾子 inOut または out を指定すると、パラメーター値に加えた変更を呼び出し側関数で使用できます。これらの修飾子については、後で『inOut とそれに関連する修飾子の影響』のセクションで説明します。
パラメーターは、そのパラメーターを含む関数によって呼び出される関数に可視ではありません。 ただし、パラメーターを引数としてそうした他の関数に渡すことはできます。
大括弧 ([]) で終了するパラメーターは動的配列であり、 その他の仕様はその配列の各エレメントの性質を宣言します。
inOut 修飾子が必要になるのは、パラメーターが項目であり、修飾子 field を指定した場合です。後者の修飾子は、パラメーターが blanks や numeric など、テスト可能な書式フィールド属性を持つことを示します。
パラメーターが (固定レコードではなく) レコードである場合、有効なのは、inOut 修飾子だけです。
inOut 修飾子が有効でない場合は、関連する引数は、『EGL での参照の互換性』での説明のとおり、パラメーターと参照の互換性がある必要があります。
field 修飾子を持つ項目に in 修飾子を使用することはできません。 また、(固定レコード以外の) レコードに対して in 修飾子を指定したり、あるいは、現行の関数の中、 または現行の関数によって呼び出される関数の中のいずれかでファイルまたはデータベースにアクセスするために 使用される固定レコードに in 修飾子を指定したりすることはできません。
引数がリテラルまたは定数である場合、引数は修飾子 in が有効である場 合とまったく同じように扱われます。
field 修飾子を持つパラメーターに out 修飾子を使用することはできません。 また、レコードに対して out 修飾子を指定したり、あるいは、現行の関数の中、 または現行の関数によって呼び出される関数の中のいずれかでファイルまたはデータベースにアクセスするために使用される固定レコードに out 修飾子を指定したりすることはできません。
ライブラリー関数はレコードの状態を受け取りません。
パラメーターがプリミティブ型と長さの数値を受け入れるようにする場合、loose type として NUMBER を使用します。この場合、パラメーターに渡される数値は小数点以下の桁を持たない必要があります。
パラメーターが特定のプリミティブ型であるが、任意の長さのストリングを受け入れるようにする場合は、CHAR、DBCHAR、MBCHAR、HEX、または UNICODE を loose type として指定し、引数が対応するプリミティブ型であることを確認します。
引数の定義によって、関数のステートメントが loose type のパラメーターで動作するときに何が発生するかが決定されます。
loose type は、ライブラリー に宣言される関数には使用できません。
プリミティブ型の詳細については、『プリミティブ型』を参照してください。
field 修飾子を使用できるのは、inOut 修飾子を指定した場合か、デフォルトで inOut 修飾子を受け入れた場合だけです。
field 修飾子は、nativeLibrary 型のライブラリー内の関数パラメーターには使用できません。
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