DEFINE FUNCTION

DEFINE FUNCTION function-name
[return-data-definition]
[function-data-definition]
statement...
END-FUNCTION

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

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

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


関数

DEFINE FUNCTION ステートメントは、タイプが関数の Natural オブジェクトとして格納される関数を定義するために使用します。ファンクションオブジェクトには 1 つのみ DEFINE FUNCTION ステートメントを含めることができます。

DEFINE FUNCTION ステートメントは、ファンクション名、パラメータ、ローカル変数およびアプリケーション独立変数、関数の結果、および操作ロジックを形成するステートメントを定義します。これらのステートメントは、関数の呼び出し時に実行されます。

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

構文説明

構文要素 説明
function-name
関数名:

function-name は、呼び出される関数の名前です。『Natural の使用』ドキュメントで説明されている「ユーザー定義変数の命名規則」に適合している必要があります。

function-name は、ファンクション定義を含む格納済みオブジェクトの名前と同じである必要はありません。

1 つのライブラリに同じファンクション名を 2 回使用することはできません。

return-data-definition
戻りデータ定義節:

この節の詳細については、下記の「戻りデータ定義」を参照してください。

function-data-definition
ファンクションデータ定義節:

この節の詳細については、下記の「ファンクションデータ定義」を参照してください。

statement...
実行するステートメント:

関数の呼び出し時に実行される操作セクションを定義します。ファンクションロジックを形成します。

END-FUNCTION
DEFINE FUNCTION ステートメントの終了:

DEFINE FUNCTION ステートメントを終了するには、Natural の予約語 END-FUNCTION を使用する必要があります。

戻りデータ定義

RETURNS [variable-name]

(format-length[/array-definition])

[BY VALUE]
[(array-definition)] HANDLE OF

dialog-element-type
OBJECT

(

A

[/array-definition]) DYNAMIC
U
B

return-data-definition 節は、フォーマット/長さ、および関数によって返される結果値の配列構造(該当する場合)を定義します。

構文要素の説明:

構文要素 説明
variable-name
戻り値名:

オプションで、ファンクションコーディング内のリターンフィールドにアクセスするために使用する名前を指定できます。このような名前を指定しない場合は、ファンクション名が代わりに使用されます。

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

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

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

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

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

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

HANDLE OFdialog-element-type
ダイアログエレメントタイプ:

ダイアログエレメントのタイプ。設定可能値は、TYPE 属性の値です。

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

NaturalX とともに使用します。

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

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

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

DYNAMIC
ダイナミック変数:

関数の結果は DYNAMIC として定義できます。

ダイナミック変数の処理の詳細については、『プログラミングガイド』の「ダイナミック変数およびフィールドについて」を参照してください。

BY VALUE
BY VALUE オプション:

BY VALUE が指定されている場合、"送信側"フィールド(return-data-definition 節内で定義)と"受信側"フィールド(関数が呼び出された場所で結果を受信)のフォーマット/長さでは、転送の互換性のみが必要です。

"受信側"フィールドのフォーマット/長さは、

  • ファンクションコールの明示的な (IR=) 節によって定義されるか、または

  • DEFINE PROTOTYPE ステートメントで定義されるか、あるいは

  • すでに存在している必要があるファンクションオブジェクトの RETURNS フィールドから継承されるかのいずれかです。

データ転送の互換性については、『プログラミングガイド』の「演算割り当てのルール」および「データ転送」に記載されている規則が適用されます。

BY VALUE が指定されていない場合、"受信側"フィールドのフォーマットと長さは、"送信側"フィールドの特性と完全に一致している必要があります。

ファンクションデータ定義

DEFINE DATA

PARAMETER

USING parameter-data-area
parameter-data-definition

 

LOCAL

USING

local-data-area
parameter-data-area

local-data-definition  
[INDEPENDENT aiv-data-definition ]
END-DEFINE

function-data-definition 節は、ファンクションコール時に提供されるパラメータと、ローカル変数やアプリケーション独立変数など、関数によって使用されるデータフィールドを定義します。グローバルデータエリア(GDA)はファンクション定義内では参照できません。

構文要素の説明:

構文要素 説明
PARAMETER USING parameter-data-area
PDA 名:

ファンクションコールでパラメータとして使用されるデータ要素を含むパラメータデータエリア(PDA)の名前を指定します。

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

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

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

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

LOCAL USING local-data-area
LDA 名:

参照するローカルデータエリア(LDA)の名前を指定します。

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

LOCAL USING parameter-data-area
PDA 名:

パラメータデータエリア(PDA)の名前を指定します。

注意:
DEFINE DATA LOCAL ステートメントで参照するデータエリアは、パラメータデータエリア(PDA)でもかまいません。PDA を LDA として使用することにより、PDA と同じ構造を持つ LDA を作成する手間を省くことができます。

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

LOCAL local-data-definition
ローカルデータ定義:

ステートメント内で、つまり LDA または PDA を使用せずに、要素またはフィールドを定義する方法については、DEFINE DATA ステートメントの説明の「ローカルデータ定義」を参照してください。

INDEPENDENT aiv-data-definition
AIV データ定義:

は、1 つまたは複数のアプリケーション独立変数(AIV)の定義に使用できます。

DEFINE DATA ステートメントの説明の「アプリケーション独立変数の定義」を参照してください。

END-DEFINE
節の終了:

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

例 1 - DEFINE FUNCTION

** Example 'DFUEX1': DEFINE FUNCTION                                    
************************************************************************
DEFINE FUNCTION F#FIRST-CHAR                                                   
  RETURNS #RESULT (A1)                                                
  DEFINE DATA PARAMETER                                                 
    1 #PARM (A10)                                                       
  END-DEFINE                                                            
  /*                                                                    
  #RESULT := #PARM        /* First character as return value.     
END-FUNCTION                                                            
*                                                                       
END

関数 F#FIRST-CHAR は、ライブラリ SYSEXSYN のサンプルプログラム DPTEX2 で使用されています。DEFINE PROTOTYPE ステートメントの説明の「」を参照してください。

例 2 - 結果値配列を持つ DEFINE FUNCTION

** Example 'DFUEX2': DEFINE FUNCTION                                    
************************************************************************
DEFINE FUNCTION F#FACTOR                                                  
  RETURNS (I2/1:3)                                                      
  DEFINE DATA PARAMETER                                                 
    1 #VALUE (I2)                                                       
  END-DEFINE                                                            
  /*                                                                    
  F#FACTOR(1) := #VALUE * 1                                                
  F#FACTOR(2) := #VALUE * 2                                                
  F#FACTOR(3) := #VALUE * 3                                                
  /*                                                                    
END-FUNCTION                                                            
*                                                                       
END

関数 F#FACTOR は、ライブラリ SYSEXSYN のサンプルプログラム DPTEX1 で使用されています。DEFINE PROTOTYPE ステートメントの説明の「」を参照してください。