|
|||||
|
|||||
|
このドキュメントでは、次のトピックについて説明します。
構文図で使用されている記号については、「構文記号」を参照してください。
関連ステートメント: DEFINE
FUNCTION
DEFINE PROTOTYPE
ステートメントを使用して、次を含む関数を呼び出すためのプロパティを指定します。
ファンクションコールで渡されるパラメータ、
ファンクションコールによって返される結果値、および
関数が DEFINE FUNCTION
ステートメントで定義されたファンクション名で呼び出されるか、またはファンクション名を含む英数字変数で呼び出されるか。
この情報は、コンパイル時に Natural オブジェクト内のファンクションコールを解決するために使用されます。
DEFINE PROTOTYPE
ステートメントは、次のいずれかに該当する場合にのみ、ファンクションコールに必要です。
指定されたファンクション名が、実行時に呼び出される関数の名前を含む英数字変数である場合。
(IR=)
節がファンクションコールで指定されておらず、呼び出された関数のカタログ化オブジェクトを使用できない場合。
ファンクションコールで提供されたパラメータが検証されるため、呼び出された関数のカタログ化オブジェクトが使用できない場合。
関数が複数のオブジェクトから呼び出される場合は、DEFINE PROTOTYPE
ステートメントをコピーコードオブジェクトに含めることができます。
詳細については、『プログラミングガイド』の次のセクションを参照してください。
Natural ファンクションオブジェクトタイプ
構文要素 | 説明 |
---|---|
[VARIABLE] prototype-name |
プロトタイプ名:
|
UNKNOWN |
UNKNOWN オプション:
キーワード |
return-data-definition |
下記の「戻りデータ定義」を参照してください。 |
parameter-definition |
下記の「パラメータ定義」を参照してください。 |
same-as-clause |
下記の「SAME AS 節」を参照してください。 |
USING FUNCTION
[DEFINITION [OF]]
function-name |
USING FUNCTION 節: function-name はタイプがファンクションのカタログ化オブジェクトの名前です。この関数のパラメータと結果フィールドの定義は、ファンクションコールを解決するために使用します。
|
END-PROTOTYPE |
DEFINE PROTOTYPE ステートメントの終了:
|
RETURNS [variable-name] |
(format-length [/array-definition]) | |||||||
[(array-definition)] HANDLE OF OBJECT |
||||||||
( | A |
[/array-definition]) | DYNAMIC |
|||||
U |
||||||||
B |
return-data-definition
節は、戻り値のフォーマット/長さと、該当する場合は、戻り値の配列構造を定義します。
戻りデータ定義が指定されていない場合、ファンクションコールは、明示的な (IR=)
節が指定されている場合にのみステートメント内で使用できます。このような節がない場合、関数はステートメントとしてのみ呼び出すことができますが、ステートメント内のオペランドの代わりに呼び出すことはできません。
構文要素の説明:
構文要素 | 説明 |
---|---|
variable-name |
戻り値名:
オプション |
format-length |
フォーマット/長さの定義:
結果フィールドのフォーマットおよび長さ。 ユーザー定義変数のフォーマットおよび長さの定義については、『プログラミングガイド』の「ユーザー定義変数のフォーマットおよび長さ」を参照してください。 |
array-definition |
配列の次元の定義:
詳細については、 |
HANDLE OF
OBJECT |
オブジェクトのハンドル:
NaturalX とともに使用します。 詳細については、『プログラミングガイド』の「NaturalX」を参照してください。 |
A 、U または B |
データタイプ:
ダイナミック結果用の英数字(A)、Unicode(U)、またはバイナリ(B)。 |
DYNAMIC |
ダイナミック変数:
関数の結果は ダイナミック変数の処理の詳細については、『プログラミングガイド』の「ダイナミック変数およびフィールドについて」を参照してください。 |
DEFINE
DATA |
||||||||
PARAMETER UNKNOWN |
||||||||
PARAMETER |
USING parameter-data-area |
|||||||
parameter-data-definition... |
... |
|||||||
END-DEFINE |
parameter-definition
節は、ファンクションコールで提供されるパラメータを定義します。この定義レイアウトは、ファンクションコールで指定されたパラメータに対してチェックされます。この節が省略されている場合、パラメータを持たない関数として宣言されます。この場合、ファンクションコールでパラメータを入力しようとするたびに拒否されます。
パラメータフィールドの名前に使用される識別子は意味を持ちません。DEFINE DATA
PARAMETER
構文と同じ構文構造にするために導入されています。
構文要素の説明:
構文要素 | 説明 |
---|---|
PARAMETER
UNKNOWN |
UNKNOWN オプション:
このオプションでは、パラメータが指定されず、ファンクションコールのパラメータチェックが無効になります。その結果、ファンクションコールの任意の数のパラメータが受け入れられます。 |
USING
parameter-data-area |
PDA 名:
ファンクションコールでパラメータとして使用されるデータ要素を含む
|
parameter-data-definition |
パラメータデータ定義:
パラメータデータエリアを定義する代わりに、ファンクションコール内でパラメータデータを直接定義することもできます。
|
END-DEFINE |
節の終了:
|
SAME AS [PROTOTYPE ]
|
prototype-name |
SAME AS
節を使用すると、同じ Natural オブジェクト内で以前に定義された別のプロトタイプのパラメータおよび結果フィールド定義を使用できます。
これは、F#FACTOR
という名前の関数のプロトタイプ定義です。ここで、prototype-name
は、参照される DEFINE
FUNCTION
ステートメントで指定された function-name
に対応します。関数によって返される結果のフォーマットは(I2/1:3)であり、フォーマット(I2)の単一パラメータが必要です。
** Example 'DPTEX1': DEFINE PROTOTYPE and function call ************************************************************************ DEFINE DATA LOCAL 1 #NUM (I2) END-DEFINE * DEFINE PROTOTYPE F#FACTOR RETURNS (I2/1:3) DEFINE DATA PARAMETER 1 #VALUE (I2) END-DEFINE END-PROTOTYPE * #NUM := 3 * WRITE 'Function call:' F#FACTOR(<#NUM>)(*) * END
関数 F#FACTOR
は、ライブラリ SYSEXSYN
のサンプル関数 DFUEX2
で定義されています。DEFINE FUNCTION
ステートメントの説明の「例」を参照してください。
DPTEX1
の出力:
Function call: 3 6 9
キーワード VARIABLE
により、このプロトタイプはファンクションコールを指定します。ここで、参照される prototype-name
は実行時にファンクション名を含む英数字変数です。
** Example 'DPTEX2': DEFINE PROTOTYPE and function call ************************************************************************ DEFINE DATA LOCAL 1 #NAME (A20) 1 #TEXT (A10) END-DEFINE * DEFINE PROTOTYPE VARIABLE #NAME RETURNS #RETURN (A1) DEFINE DATA PARAMETER 1 #IN (A10) END-DEFINE END-PROTOTYPE * #NAME := 'F#FIRST-CHAR' #TEXT := 'ABCDEFGHIJ' * WRITE 'First character:' #NAME(<#TEXT>) * END
関数 F#FIRST-CHAR
は、ライブラリ SYSEXSYN
のサンプル関数 DFUEX1
で定義されています。DEFINE FUNCTION
ステートメントの説明の「例」を参照してください。
DPTEX2
の出力:
First character: A