バージョン 4.2.5
 —  ステートメント  —

パラメータデータの定義

DEFINE DATA PARAMETER の一般的な構文:

PARAMETER

USING parameter-data-area

parameter-data-definition../graphics/dot3.gif

このドキュメントでは、次のトピックについて説明します。

構文図で使用されている記号については、「構文記号」を参照してください。


機能

DEFINE DATA PARAMETER ステートメントでは、Natural サブプログラム、外部サブルーチン、またはヘルプルーチンで、受信パラメータとして使用できるデータ要素を定義します。 これらのパラメータは、ステートメント自体の中で定義できます(下記の「パラメータデータ定義」を参照)。または、データエリアを参照するステートメントを使用して、プログラムの外にあるパラメータデータエリア(PDA)でパラメータを定義することもできます。

Top of page

制限事項

Top of page

構文説明

USING parameter-data-area サブプログラム、外部サブルーチン、またはダイアログでパラメータとして使用されるデータ要素を含む parameter-data-area の名前。
parameter-data-definition パラメータデータエリアを定義する代わりに、プログラムまたはサブルーチン内でパラメータデータを直接定義することもできます。下記の「パラメータデータ定義」を参照してください。
END-DEFINE Natural 予約語 END-DEFINE を使用して、DEFINE DATA ステートメントを終了させる必要があります。

パラメータデータ定義

ダイレクトパラメータデータ定義には、次の構文が適用されます。

level

group-name [(array-definition)]

redefinition
 

(format-length[/array-definition])

../graphics/cbc3.gif

 
variable-name [BY VALUE [RESULT]] [OPTIONAL]

A
U
B

[(array-definition)]

DYNAMIC
parameter-handle-definition [BY VALUE [RESULT]] [OPTIONAL]

構文要素の説明:

level

レベル番号は 01~99 の範囲内の 1 桁または 2 桁の数字(先頭の 0 は任意)を使用し、フィールドグルーピングと合わせて使用します。 02 またはそれ以上のレベル番号が割り当てられたフィールドは、それより小さいレベル番号が割り当てられた直前のグループの一部であるとみなされます。

グループを定義すると、グループ名を使用して一連のフィールド(または 1 つのフィールドのみ)を参照できます。 特定のステートメント(CALLCALLNATRESETWRITE など)の場合、グループ名をショートカットとして指定し、グループに含まれるフィールドを参照することもできます。

グループには、他のグループを含めることができます。 グループにレベル番号をつけるときは、レベル番号を飛ばしてはなりません。

group-name グループの名前。 名前は、Natural 変数名の定義ルールに準拠していなければなりません。 次のセクションも参照してください。
array-definition array-definition の場合、配列定義の次元の下限と上限を定義します。 「配列の次元の定義」および「パラメータデータエリア内の可変配列」を参照してください。
redefinition

redefinition を使用して、グループまたは単一のフィールド/変数(スカラまたは配列)を再定義できます。 「再定義」を参照してください。

注意:
parameter-data-definition では、グループの "再定義" は REDEFINE ブロック内のみで行うことができます。

variable-name 変数に割り当てられる名前。 Natural 変数名のルールが適用されます。 ユーザー定義変数の命名規則については、『Natural の使用』ドキュメントの「ユーザー定義変数の命名規則」を参照してください。
format-length フィールドのフォーマットおよび長さ。 ユーザー定義変数のフォーマットおよび長さの定義については、『プログラミングガイド』の「ユーザー定義変数のフォーマットおよび長さ」を参照してください。
A、U、または B データタイプ:ダイナミック変数用の英数字(A)、Unicode(U)、またはバイナリ(B)。
DYNAMIC パラメータは DYNAMIC として定義できます。 ダイナミック変数の処理の詳細については、「ダイナミック変数およびフィールドについて」を参照してください。
 
コールモード:

参照による呼び出し、値による呼び出し、値による呼び出しと結果のいずれを使用するかに応じて、適切な転送メカニズムが適用されます。 詳細については、CALLNAT ステートメントを参照して下さい。

(BY VALUE を省略)
参照による呼び出し:

参照による呼び出しは、BY VALUE キーワードを省略した場合にデフォルトで有効になります。 この場合、パラメータは参照によって(つまりアドレスを介して)サブプログラムまたはサブルーチンに渡されるため、CALLNAT または PERFORM ステートメント内でパラメータとして指定するフィールドのフォーマット/長さは、サブプログラムまたはサブルーチンで呼び出される対応するフィールドと同じである必要があります。

BY VALUE
値による呼び出し:

BY VALUE を指定すると、パラメータは値によってサブプログラムまたはサブルーチンに渡されます。つまり、(アドレスの代わりに)実際のパラメータ値が渡されます。 さらに、サブプログラムまたはサブルーチン内にあるフィールドのフォーマット/長さは、CALLNAT または PERFORM パラメータと同じである必要はありません。 フォーマット/長さでは、データ転送の互換性のみが必要です。 データ転送の互換性に関しては、『プログラミングガイド』の「演算割り当てのルール」セクションにある「データ転送」の対応表が適用されます。

BY VALUE を使用すると、例えば、サブプログラムまたはサブルーチンを呼び出すオブジェクトを調整しなくても、サブプログラムまたはサブルーチン内でフィールドの長さを増加させることができます(サブプログラムまたはサブルーチンの拡張によってそれが必要になった場合)。

BY VALUE の例:
* Program
DEFINE DATA LOCAL
1 #FIELDA (P5)
...
END-DEFINE
...
CALLNAT 'SUBR01' #FIELDA
...
* Subroutine SUBR01
DEFINE DATA PARAMETER
1 #FIELDB (P9) BY VALUE
END-DEFINE
...
BY VALUE RESULT
値による呼び出しと結果:

BY VALUE はサブプログラムまたはサブルーチンに渡されるパラメータに適用されますが、BY VALUE RESULT では、パラメータが値によって両方向に渡されます。つまり、実際のパラメータ値が呼び出し側のオブジェクトからサブプログラムまたはサブルーチンに渡され、呼び出し側のオブジェクトに戻るときに、実際のパラメータ値がサブプログラムまたはサブルーチンから呼び出し側オブジェクトに返されます。

BY VALUE RESULT を指定する場合は、対象フィールドのフォーマット/長さに関して、両方向のデータ転送で互換性を確保する必要があります。

OPTIONAL

OPTIONAL を使用しないで定義したパラメータ(デフォルト)には、呼び出し側のオブジェクトから値を渡す必要があります。

OPTIONAL を使用して定義したパラメータには、値を渡すことはできますが、呼び出し側のオブジェクトからこのパラメータに値を渡す必要はありません。

呼び出し側のオブジェクトでは、スキップされるパラメータが、表記 nX を使用して示されます。つまり、値は渡されません。

SPECIFIED オプションを指定すると、実行時にオプションパラメータが定義されているかどうかを確認できます。

parameter-handle-definition 下記の「パラメータハンドルの定義」を参照してください。

パラメータハンドルの定義

parameter-handle-definition の構文:

handle-name [(array-definition)] HANDLE OF OBJECT

構文要素の説明:

handle-name ハンドルに割り当てる名前です。ユーザー定義変数の命名規則が適用されます。『Natural の使用』ドキュメントの「ユーザー定義変数の命名規則」を参照してください。
HANDLE OF OBJECT プログラミングガイド』の「NaturalX」セクションで説明されているように、NaturalX と一緒に使用します。
array-definition array-definition の場合、配列定義の次元の下限と上限を定義します。 「配列の次元の定義」を参照してください。

Top of page