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