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

DEFINE PROTOTYPE

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 キーワードを使用します。

関連トピック:

ユーザー定義関数
ファンクションコール

Top of page

構文説明

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 を使用する必要があります。

signature 節

    [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 節

SAME AS [PROTOTYPE]

prototype-name

prototype-variable-name

この節では、以前に定義した署名を使用して新規のプロトタイプを定義します。

USING FUNCTION 節

[USING FUNCTION [DEFINITION [OF]] function-name]

この明示的な節を使用すると、ファンクションのパラメータ定義に対して生成されたオブジェクトの分析が可能になります。この分析は、そのファンクションの論理名で間接的な DEFINE PROTOTYPE ステートメントを作成するために実行されます。 function-name は論理名ですが、ファンクションオブジェクトのオブジェクト名ではありません。 論理ファンクション名は、対応するファンクションオブジェクトのファンクションの本体 DEFINE FUNCTION function-name ... END-FUNCTION で定義します。

Top of page

例 1 - DEFINE PROTOTYPE

これは "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

例 2 - DEFINE PROTOTYPE

次の 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

Top of page