パラメータデータの定義

DEFINE DATA PARAMETER の全般的な構文:

DEFINE DATA
   PARAMETER

USINGparameter-data-area

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

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

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


関数

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

制限

  • パラメータのデータ要素には、初期値または定数値を割り当てることはできず、またこれらのデータ要素では、編集マスク(EM)、ヘッダー(HD)、または出力モード(PM)を保持することはできません(「フィールド/変数の EM、HD、PM パラメータ」も参照)。

  • パラメータデータエリアとそれを参照するオブジェクトは、同じライブラリ(または STEPLIB)に含まれている必要があります。

構文説明

構文要素 説明
USING parameter-data-area
パラメータデータエリア(PDA)名:

サブプログラム、外部サブルーチン、またはダイアログでパラメータとして使用されるデータ要素を含む parameter-data-area(PDA)の名前。

parameter-data-definition
パラメータデータ定義:

PDA を使用する代わりに、パラメータデータを直接定義できます。

パラメータデータ定義」を参照してください。

END-DEFINE
DEFINE DATA ステートメントの終了:

DEFINE DATA ステートメントを終了するには、Natural の予約語 END-DEFINE を使用する必要があります。

パラメータデータ定義

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

level

group-name [(array-definition)]

redefinition
variable-name

../graphics/cbo5.gif

(format-length[/array-definition])

../graphics/cbc5.gif

[BY VALUE [RESULT]] [OPTIONAL]
(

A
U
B

[/array-definition])   DYNAMIC
[(array-definition)] HANDLE OF OBJECT

構文要素の説明:

構文要素 説明
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
フォーマット/長さの定義:

フィールドのフォーマットおよび長さ。

ユーザー定義変数のフォーマットおよび長さの定義については、『プログラミングガイド』の「ユーザー定義変数のフォーマットおよび長さ」を参照してください。

HANDLE OF OBJECT
オブジェクトのハンドル:

NaturalX とともに使用します。ハンドルは、コードのダイアログエレメントを特定し、ハンドル変数に格納されます。

詳細については、『プログラミングガイド』の「NaturalX」を参照してください。

AU または B
データタイプ:

ダイナミック変数用の英数字(A)、Unicode(U)、またはバイナリ(B)。

DYNAMIC
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 オプションを指定すると、実行時にオプションパラメータが定義されているかどうかを確認できます。