CodeMode (メソッド・キーワード)
使用法
メソッドの実装方法を指定するには、以下の構文を使用します。
Method name(formal_spec) As returnclass [ CodeMode=codemode ]
{ //implementation }
codemode は以下のいずれかになります。
-
call — このメソッドは、ルーチン呼び出しのエイリアスです (従来のコードを囲むために使用します)。
-
code (既定) — このメソッドは、コード行として実装されます。
-
expression — このメソッドは、式として実装されます。
-
objectgenerator — このメソッドは、メソッド・ジェネレータです。
このキーワードには、generator という値があります。これは、以前に使用されていたキーワードで、従来の非オブジェクト・ベースのメソッド・ジェネレータを使う必要があることを示しています。この値は、従来のバージョンとの互換性を保つ目的にのみ残されています。新しいアプリケーションでは objectgenerator を使用する必要があります。
詳細
このキーワードは、任意のメソッドの実装方法を指定します。
通常、メソッドは 1 行以上の行のコードを使用して実装します。これは、CodeMode の既定値の code で指定されます。この場合、メソッド実装は 1 行以上のコードになります。
特定の単純なメソッドは、式メソッドとして実装できます。この場合、メソッド実装は (no Quit または Return 文と合わせて) 単純な式となります。
呼び出しメソッドは、ルーチンのラッパです。この場合、メソッド実装はルーチン名とタグ名になります。
メソッド・ジェネレータは、クラスのコンパイル時にクラス・コンパイラによって実行されるプログラムです。これは、任意のメソッドに対する実際の実装を生成します。この場合、メソッド実装はメソッド・ジェネレータ用のコードとなります。
既定値
CodeMode キーワードの既定値は、code です。既定の場合、CodeMode キーワードはすべて省略できます。以下に例を示します。
Method name(formal_spec) As returnclass
{ //implementation }
例
/// An expression method
Method Double(val As %Integer) As %Integer [ CodeMode = expression ]
{
val * 2
}
/// A Method generator
Method GetClassName() As %String [ CodeMode = objectgenerator ]
{
Do %code.WriteLine(" Quit """ _ %class.Name _ """")
Quit $$$OK
}