DEFINE PROTOTYPE

DEFINE PROTOTYPE

../graphics/sbo1.gif

[FOR] VARIABLE

prototype-name
 

UNKNOWN
[return-data-definition] [parameter-definition]
same-as-clause
USING FUNCTION [DEFINITION [OF]] function-name

 
END-PROTOTYPE

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

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

関連ステートメント: DEFINE FUNCTION


関数

DEFINE PROTOTYPE ステートメントを使用して、次を含む関数を呼び出すためのプロパティを指定します。

この情報は、コンパイル時に Natural オブジェクト内のファンクションコールを解決するために使用されます。

DEFINE PROTOTYPE ステートメントは、次のいずれかに該当する場合にのみ、ファンクションコールに必要です。

  • 指定されたファンクション名が、実行時に呼び出される関数の名前を含む英数字変数である場合。

  • (IR=) 節がファンクションコールで指定されておらず、呼び出された関数のカタログ化オブジェクトを使用できない場合。

  • ファンクションコールで提供されたパラメータが検証されるため、呼び出された関数のカタログ化オブジェクトが使用できない場合。

関数が複数のオブジェクトから呼び出される場合は、DEFINE PROTOTYPE ステートメントをコピーコードオブジェクトに含めることができます。

詳細については、『プログラミングガイド』の次のセクションを参照してください。

構文説明

構文要素 説明
[VARIABLE] prototype-name
プロトタイプ名:

prototype-name は次のいずれかになります。

  • パラメータと結果フィールドの定義を使用するプロトタイプの名前。この名前は通常、参照される関数の DEFINE FUNCTION ステートメントの function-name と一致します。

  • キーワード VARIABLE が指定されている場合に、ファンクションコールfunction-name として指定された英数字フィールドの名前。このフィールドに、実行時に呼び出される関数の名前が含まれている必要があります。

    フィールド名では、配列の添字表現は指定しないでください。

UNKNOWN
UNKNOWN オプション:

キーワード UNKNOWN は、ファンクションインターフェイスが現在未定義であることを示します。この場合、カタログ化オブジェクト(使用可能な場合)は、関数の結果およびパラメータの説明の抽出には使用されません。ファンクションコール が Natural ステートメントに組み込まれている場合、これには (IR=) 節を使用して結果レイアウトを明示的に指定する必要があります。また、ファンクションコールで指定されたパラメータはチェックされません。

return-data-definition 下記の「戻りデータ定義」を参照してください。
parameter-definition 下記の「パラメータ定義」を参照してください。
same-as-clause 下記の「SAME AS 節」を参照してください。
USING FUNCTION [DEFINITION [OF]] function-name
USING FUNCTION 節:
function-name はタイプがファンクションのカタログ化オブジェクトの名前です。この関数のパラメータと結果フィールドの定義は、ファンクションコールを解決するために使用します。
END-PROTOTYPE
DEFINE PROTOTYPE ステートメントの終了:

DEFINE PROTOTYPE ステートメントを終了するには、Natural の予約語 END-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
戻り値名:

オプション variable-name は意味を持ちません。このオプションは、DEFINE FUNCTION ステートメントの戻りデータ定義 節と同じ構文構造にするために導入されています。

format-length
フォーマット/長さの定義:

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

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

array-definition
配列の次元の定義:

array-definition では、関数結果が配列フィールド配列の場合、定義の次元の下限と上限を定義します。

詳細については、DEFINE DATA ステートメントの説明にある「配列の次元の定義」を参照してください。

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

NaturalX とともに使用します。

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

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

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

DYNAMIC
ダイナミック変数:

関数の結果は 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-area の名前。

DEFINE DATA ステートメントの説明の「パラメータデータの定義」も参照してください。

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

パラメータデータエリアを定義する代わりに、ファンクションコール内でパラメータデータを直接定義することもできます。

DEFINE DATA ステートメントの説明の「パラメータデータ定義」も参照してください。

END-DEFINE
節の終了:

parameter-definition 節を終了するには、Natural の予約語 END-DEFINE を使用する必要があります。

SAME AS 節

SAME AS [PROTOTYPE] prototype-name

SAME AS 節を使用すると、同じ Natural オブジェクト内で以前に定義された別のプロトタイプのパラメータおよび結果フィールド定義を使用できます。

例 1 - ファンクション名が定義された DEFINE PROTOTYPE

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

例 2 - 変数のファンクション名を持つ DEFINE PROTOTYPE

キーワード 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