Function
Synopsis
[Public | Private] Function name [(arglist)] [ As classname ] [statements] [name = expression] [Exit Function] [statements] [name = expression] End Function
引数
Function 文の構文は、以下の部分で構成されます。
Public | オプション — すべてのスクリプト内の全プロシージャから参照できる Function プロシージャを指定するキーワード。 |
Private | オプション — 宣言するスクリプト内の他のプロシージャのみがアクセス可能な Function プロシージャを指定するキーワード。 |
name | Function の名前。ローカル変数の名前付け規約に従います。 |
arglist | オプション — Function プロシージャを呼び出すときに、Function プロシージャに渡す引数を表す変数のリスト。複数の変数を指定するときは、カンマ (,) で区切ります。 |
classname | オプション — 返り値のクラス名。 |
statements | Function プロシージャの本文内で実行する一連の文。 |
expression | オプション — Function の返り値。 |
arglist 引数は以下の構文と構成部で成り立っています。
[ByVal | ByRef] varname[( )]
ByVal | 引数が値渡しであることを示します。 |
ByRef | 引数が参照渡しであることを示します。 |
varname | 引数を示す変数の名前。変数の標準的な名前付け規約に従います。 |
概要
Function プロシージャはスクリプト内にある他のすべてのプロシージャから可視です。Function のローカル変数値は、プロシージャの呼び出しが終わると破棄されます。
すべての実行可能コードはプロシージャ内に記述する必要があります。入れ子は許可されていません。つまり、Function プロシージャを別の Function プロシージャ内や Sub プロシージャ内で定義することはできません。
Exit Function 文は、Function プロシージャを即時に終了させます。Function プロシージャを呼び出した文の後に続く文でプログラムの実行を継続します。Exit Function 文は Function プロシージャ内の任意の場所にいくつでも指定できます。
Sub プロシージャ同様、Function プロシージャは、引数を取り、一連の文を実行し、その引数の値を変更する、個別のプロシージャです。しかし、Sub プロシージャとは異なり、関数によって返された値を使用したいとき、Sqr や Cos、Chr などの内部関数と同じ要領で、式の右側に Function プロシージャを使用できます。
式の中で、関数名を使用して Function プロシージャを呼び出し、続く括弧に引数リストを指定します。Function プロシージャの使用法に関する詳細は "Call" 文を参照してください。
Function から値を返すには 2 とおりの方法があります。Return 文で値を指定するか、関数名に値を代入します。この代入は、プロシージャ内の任意の場所にいくつでも指定できます。名前に値が代入されていない場合、このプロシージャは既定値の、長さが 0 の文字列 () を返します。Function 内の名前に、オブジェクト参照が代入されていない場合、オブジェクト参照を返す関数は 0 の長さの文字列 ("") を返します。
Function プロシージャ内で使用する変数は、プロシージャ内で明示的に宣言するものと、そうでないものの 2 つに分けられます。プロシージャ内で (Dim などを使用して) 明示的に宣言された変数は、常にそのプロシージャのローカル変数です。プロシージャ内で明示的に宣言せずに使用されている変数も、そのプロシージャの外部のさらに上のレベルで明示的に宣言されていない限りは、ローカル変数となります。
Caché Basic Function プロシージャ内の変数はすべてプライベートです。このため、Function プロシージャは SQLCODE などのパブリック変数にアクセスできません。パブリック変数を使用するには、呼び出された関数またはサブルーチンではなく、最上位の Caché Basic ルーチンを使用します。
arglist 引数値を省略するには、未定義の変数を指定する必要があります。これは、ObjectScript と Caché Basic の大きな違いです。ObjectScript では、プレースホルダとしてコンマを使用することで、省略する引数を指定できます。Caché Basic では、プレースホルダとしてコンマを使用することはできません。未定義の名前付き変数を指定する必要があります。
例
以下の例は、返り値を代入する 2 つの方法を示しています。まず、Return 文に "True" を指定する方法と、次に IsGreaterThan という名前の関数に "False" を指定する方法です。関数名への False の代入は、無効な値が検出されたことを示します。
Function IsGreaterThan(lower, upper)
If lower < upper Then Return True
IsGreaterThan = False
End Function
メモ
Function プロシージャは再帰的に使用することができます。つまり、タスクを実行するのにそのプロシージャ自体を呼び出すことができます。しかし、再帰呼び出しを行うとスタックのオーバーフローを引き起こす場合があります。