構造化フィールド配列の受け渡し方法

構造化フィールド配列は、呼び出し先プログラムに渡すことができます。 call ステートメント内と、呼び出し先プログラムのパラメーター・リスト内の両方で、特殊規則に従う必要があります。

例えば、以下のレコード・パーツを検討します。
Record MyRecordPart type basicRecord
   10 myInt INT[5];
   10 myChar CHAR(1);
end
レコード宣言の例を以下に示します。
myRecord MyRecordPart;
MyProgram プログラムを呼び出しており、単一の要素またはレコード全体ではなく、構造化フィールド配列を渡す必要がある場合、1 つのタスクは call ステートメントのコーディングです。これは以下のようにします。
call MyProgram( myRecord.myInt[*] );

大括弧で囲んだアスタリスク ([*]) は、「先行する変数を構造化フィールド配列として扱う」ということを意味します。 myRecord.myInt を大括弧なしで指定する場合、myRecord.myInt[1] をコーディングした場合のように、プログラムは配列内の最初の要素のみを受け取ります。

2 番目のタスクは、プログラムそのもののパラメーター・リストを定義することです。
Program MyProgram type BasicProgram ( myInt INT[5]! )
   
end

感嘆符は、先行する変数が、呼び出し先プログラム内でサイズ変更可能な動的配列ではなく、構造化フィールド配列であることを示します。 配列サイズおよび感嘆符は、それぞれの配列次元の後に必要です。

ここで説明している規則を使用する場合、呼び出しはレコード全体を渡した場合よりも遅くなることがあります。 例えば、以下のレコード・パーツに基づくレコードについて考慮してみましょう。
Record X type BasicRecord
	10 myChar CHAR(4)[2];
		20 mySubChar01 char(2);
		20 mySubChar02 char(2);
end

mySubChar01 または mySubChar02 配列を渡す場合、フィールドは、連続的に保管されていない場合でも、連続的なメモリー・ブロックで渡されます。 データはコピーする必要があり、余分の処理時間がかかります。

一般に、パフォーマンスの問題は以下の場合に発生します。

多次元構造化フィールド配列の保管方法について詳しくは、『配列』を参照してください。


フィードバック