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

DEFINE FUNCTION

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

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

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

関連トピック:ユーザー定義関数


機能

DEFINE FUNCTION ステートメントでは、新規ユーザー定義関数(Natural ステートメントのオペランドの代わりに呼び出し可能)を作成します。 ファンクションは、オブジェクトタイプ FUNCTION の中だけで定義できます。このオブジェクトタイプの詳細については、『プログラミングガイド』の「ファンクション」を参照してください。

Top of page

構文説明

function-name

function-name は、定義される Natural ファンクションの記号名です。 この名前は、ユーザー定義変数と同じ命名規則に適合している必要があります。詳細については、『Natural スタジオの使用』ドキュメントの「ユーザー定義変数の命名規則」を参照してください。 したがって、名前は最大 32 文字で構成され、先頭の文字は英字または "#" などの一部の特殊文字になります。

1 つのライブラリ(STEPLIB メカニズムのライブラリを含む)に同じファンクション名を 2 回使用することはできません。 ファンクションの多重定義は許可されていません。 したがって、すべてのファンクション定義の名前は一意である必要があります。

return-data-definition この節の詳細については、下記の「戻りデータ定義」を参照してください。
function-data-definition この節の詳細については、下記の「ファンクションデータ定義」を参照してください。
END-FUNCTION DEFINE FUNCTION ステートメントを終了するには、Natural 予約語 END-FUNCTION を使用する必要があります。

戻りデータ定義

RETURNS [variable-name]

(format-length[/array-definition])

  [BY VALUE]
(

A

[/array-definition]) DYNAMIC
U
B

構文要素の説明:

RETURNS 各ファンクションには、戻り変数の定義を 1 つだけ含めることができます。つまり、RETURNS 節を 1 つだけ指定できます。
variable-name

戻り値は variable-name を使用して割り当てることができます。 定義内で明示的な変数名を指定していない場合、ファンクション名が戻り変数として使用されます。

戻り値を配列にすることはできません。

BY VALUE

BY VALUE RESULT または by reference(参照渡し)として各パラメータを定義すると、各パラメータを使用して呼び出し元に値を戻すことができます。 再帰的なファンクションコールをファンクション定義内で使用できます。

RETURNS 節の中で BY VALUE キーワードを使用している場合、ファンクションの戻り値は、RETURNS 節で設定される戻りの format-length に変換されます。

format-length BY VALUE を使用しない場合、RETURNS 節の format-length は、実行時に評価されるファンクションによって返される format-length と一致している必要があります。
array-definition array-definition では、配列定義の次元の下限と上限を定義します。 詳細については、DEFINE DATA ステートメントの説明および「配列の次元の定義」を参照してください。
DYNAMIC パラメータは DYNAMIC として定義できます。 ダイナミック変数の処理については、「ラージ変数/フィールドとダイナミック変数/フィールド」を参照してください。

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

各ファンクションオブジェクトには、ファンクションデータ定義を 1 つだけ含めることができます。

 DEFINE DATA
 

PARAMETER

USING parameter-data-area

 

 
parameter-data-definition
 

LOCAL

USING

local-data-area

 

parameter-data-area
data-definition  
[INDEPENDENT AIV-data-definition ]
 END-DEFINE

ファンクションでは、グローバルデータエリアを使用する別の Natural オブジェクトを呼び出すときに、独自のグローバルデータエリア(GDA)を確立します。 したがって、呼び出し側オブジェクトの現在のグローバルデータエリアを変更することはできません。 また、GDA をファンクション内で定義することはできません。

Top of page

ファンクション定義を含んでいるファンクションオブジェクト:

DEFINE FUNCTION GET-FIRST-BYTE
  RETURNS (A1)
  DEFINE DATA PARAMETER
  1 #PARA (A10)
  END-DEFINE
  GET-FIRST-BYTE := #PARA /* return value is assigned   
END-FUNCTION
END

Top of page