TYPE 属性は、集合体 (つまり、配列または構造体) の結果を返す関数を宣言するために使用できます。次に例を示します。
/* TYPE DEFINITION */ DECLARE ARRAY(10) CHAR(80), 1 STRUCTURE, 2 LEVEL1 BINARY(15) 2 LEVEL2 BINARY(15) DECLARE FUNCTION1 ENTRY RETURNS(TYPE(ARRAY)); FUNCTION2 ENTRY RETURNS(TYPE(STRUCTURE));
また、次の 2 つの状況のいずれかでは、TYPE 属性により、集合体変数を値で渡すこともできます。
DECLARE XARR(10) FIXED BIN(15) YYR TYPE( XARR ), RTE ENTRY( TYPE(XARR) ), FCA ENTRY RETURNS( TYPE(XARR) ); CALL RTE( (XARR) ); /* CASE 1 */ CALL RTE( (YYR) ); /* CASE 1 */ CALL RTE( (FCA()) ); /* CASE 2 */
呼び出し先ルーチンのパラメーターには、引き数と同じ TYPE 属性が設定されている必要があります。上記の例では、RTE のパラメーターに TYPE(XARR) 属性が指定されています (3 行目を参照)。この TYPE 属性は、後続の RTE の呼び出しで引数によって使用される TYPE 属性と同じです (最後の 3 行を参照)。
集合体変数を値で渡す場合、型定義に含まれるすべての範囲は、定数値を保持する必要があります。たとえば、前記の部分的なプログラムでは、XARR を次のように宣言することはできません。
DECLARE N FIXED BINARY(31) INIT(10); DECLARE XARR(N) FIXED BIN(15), . . .
次元 (配列の境界) は、型定義または型付き変数のいずれかで指定できますが、両方で指定することはできません。たとえば、次に示す配列の配列の宣言は無効です。
DECLARE XXX(10) CHAR(80), /* VALID */ YYY TYPE( XXX ), /* VALID */ ZZZ(10) TYPE( XX ); /* INVALID -- ARRAY OF ARRAYS */