|
|||||
|
|||||
|
このドキュメントでは、次のトピックについて説明します。
構文図で使用されている記号については、「構文記号」を参照してください。
関連ステートメント: 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