TYPE 属性の拡張

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));
注:

関数の型定義に含まれるすべての範囲は、定数値を保持する必要があります。たとえば、前記の宣言にある ARRAY(10) の次元属性を変数にすることはできません。

また、次の 2 つの状況のいずれかでは、TYPE 属性により、集合体変数を値で渡すこともできます。

呼び出し先ルーチンのパラメーターには、引き数と同じ 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 */