DEFINE PROTOTYPE
|
|||||
UNKNOWN
|
|||||
prototype-name | signature-clause | ||||
[FOR ] VARIABLE prototype-variable-name
|
same-clause | ||||
[USING FUNCTION [DEFINITION [OF ]] function-name |
|||||
END-PROTOTYPE
|
このドキュメントでは、次のトピックについて説明します。
構文図で使用されている記号については、「構文記号」を参照してください。
関連ステートメント:DEFINE FUNCTION
『プログラミングガイド』の「ユーザー定義関数」も参照してください。
プロトタイプ定義は、特定のファンクションコールに従って署名を指定するために使用することができます。 各ファンクションコールで、戻りタイプは、ファンクションコール(VARIABLE
)の種類と同様に識別される必要があります。 したがって、このデータは各ファンクションコールに対して有効である必要があります。 このデータがない場合、プロトタイプキーワードをファンクションコール参照内で使用する必要があります。 プロトタイプ内にパラメータ定義があれば、ファンクションコールのパラメータ値はプロトタイプ定義のパラメータと比較されます。
パラメータをチェックする必要がない場合は、プロトタイプ定義の DEFINE DATA PARAMETER
ステートメント内で UNKNOWN
キーワードを使用します。
prototype-name | prototype-name はユーザー定義変数を定義するために使用されるものと同じ規則に従う必要があります(例外:プロトタイプ名ではピリオド "." が使用可能)。 prototype-name は完全に任意です。 対応するファンクション定義と同じ名前にする必要はありません。 prototype-name 全体の最大長は 32 文字です。 |
---|---|
VARIABLE prototype-variable-name | prototype-variable-name により、可変のファンクション名を使用してファンクションを呼び出すことができます。 これは CALLNAT ファンクションの呼び出しに似ています。 prototype-variable-name は、ファンクション参照で呼び出されるファンクションの実際の名前を含む英数字変数名です。
|
UNKNOWN | パラメータをチェックする必要がない場合は、プロトタイプ定義の DEFINE DATA PARAMETER ステートメント内で UNKNOWN キーワードを使用します。
|
signature-clause | 下記の「signature 節」を参照してください。 |
prototype-return-data-definition | 「プロトタイプ戻りデータ定義」を参照してください。 |
same-clause | 下記の「SAME AS 節」を参照してください。 |
USING FUNCTION [DEFINITION [OF]] function-name | 下記の「USING FUNCTION 節」を参照してください。 |
END-PROTOTYPE | DEFINE PROTOTYPE ステートメントを終了するには、Natural 予約語 END-PROTOTYPE を使用する必要があります。
|
[prototype-return-data-definition] | ||||||||
DEFINE DATA
|
||||||||
PARAMETER UNKNOWN
|
||||||||
PARAMETER
|
USING parameter-data-area
|
|||||||
parameter-data-definition | ...
|
|||||||
END-DEFINE
|
signature(署名)節はある種のファンクションコールのように見えます。 通常、プロトタイプはファンクション定義に一致します。 しかし、正確に同じである必要はありません。 したがって、パラメータデータを省略したり、代わりにキーワード UNKNOWN
を設定することが可能です。 この場合、コンパイル時にチェックされるパラメータはありません。
戻り値のタイプは、どのような場合でも設定する必要があります。 戻り値を定義していない場合は、ファンクションコールから変数への割り当てを行うことはできません。
プロトタイプ定義内で署名を指定していない場合(署名が UNKNOWN
の場合)は、ファンクションコールの対応する署名をキーワード PT
を使用して指定する必要があります。 PT
の詳細については、『プログラミングガイド』の「ファンクションコール」にある「プロトタイプキャスト」セクションを参照してください
RETURNS [variable-name]
|
(format-length)[/array-definition] | |||||||
( | A |
[/array-definition]) | DYNAMIC
|
|||||
U |
||||||||
B |
この節では、コンパイル時に認識される必要がある戻り値の format-length を定義します。
オプションの変数名は無視されます。 このオプションは、DEFINE FUNCTION
ステートメントの RETURNS
節と同じ構文構造にするために導入されています。
SAME AS [PROTOTYPE ]
|
prototype-name | ||
prototype-variable-name |
この節では、以前に定義した署名を使用して新規のプロトタイプを定義します。
[USING FUNCTION [DEFINITION [OF ]] function-name]
|
この明示的な節を使用すると、ファンクションのパラメータ定義に対して生成されたオブジェクトの分析が可能になります。この分析は、そのファンクションの論理名で間接的な DEFINE PROTOTYPE
ステートメントを作成するために実行されます。 function-name は論理名ですが、ファンクションオブジェクトのオブジェクト名ではありません。 論理ファンクション名は、対応するファンクションオブジェクトのファンクションの本体 DEFINE FUNCTION function-name ... END-FUNCTION
で定義します。
これは "GET-FIRST-BYTE" というファンクションのプロトタイプ定義です。 次のプロトタイプを使用すると、ファンクション "GET-FIRST-BYTE" を記号ファンクションコールとして呼び出すことができます。
GET-FIRST-BYTE(<#A>)
DEFINE DATA LOCAL 1 #A(A10) INIT <'abcdefghij'> END-DEFINE DEFINE DATA LOCAL 1 #A(A10) INIT <'abcdefghij'> END-DEFINE DEFINE PROTOTYPE GET-FIRST-BYTE RETURNS (A1) DEFINE DATA PARAMETER 1 PARM1(A10) END-DEFINE END-PROTOTYPE WRITE GET-FIRST-BYTE(<#A>) END
次の Natural コードには、ファンクションのプロトタイプ定義 "GET-FIRST-BYTE" が含まれています。 ファンクションをダイナミックに呼び出すことができるように、ファンクションの名前は英数字変数 #A
に保存する必要があります。 変数 #A
は、使用する前に英数字変数として DEFINE DATA
ステートメント内で定義する必要があります。
DEFINE DATA LOCAL 1 FUNCTION-NAME(A32) INIT<'GET-FIRST-BYTE'> 1 #A(A10) INIT <'abcdefghij'> END-DEFINE DEFINE PROTOTYPE VARIABLE FUNCTION-NAME RETURNS (A1) DEFINE DATA PARAMETER 1 PARM1(A10) END-DEFINE END-PROTOTYPE WRITE FUNCTION-NAME(<#A>) END