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