ユーザ定義の Basic コード
一般的なアプリケーションは、実際のアプリケーション・ロジックを含む、複数のユーザ定義のメソッドと関数で構成されています。これらはプロシージャとして存在し、その中のコードは “プロシージャ・レベルのコード” と呼ばれます。プロシージャのコード・ブロックの外側のコードは、“スクリプト・レベルのコード” と呼ばれます。
Basic メソッド
Caché Basic アプリケーションでは、ユーザ定義のビジネス・ロジック (アプリケーションに対するコード) は一般的に、クラスで定義されたメソッド内に含まれています。
Class MyApp.MyClass [language = basic]
{
Method MyMethod() As %Integer
{
a = 22
Return a
}
}
このクラスの主な言語は、(language キーワードを使用して) “Basic” として指定されていることに注意してください。これは、すべてのメソッドが Basic を使用して実装されるということを意味しています。これをメソッドごとにオーバーライドすることができ、また、同じクラス内で異なる言語を使用してメソッドを混在させることも可能です。
##super
Basic メソッドでは、##super 構文を使用してスーパークラスから継承されたメソッドを同じ名前で呼び出すことができます(##super の一般的な説明は、Caché オブジェクトの使用法 の “オブジェクト特有の ObjectScript の機能” の章の “##super syntax” を参照してください)。
Basic メソッドが ##super を使用し、複数のスーパークラスが同じメソッドを定義する場合、Inheritance キーワードの値にかかわらず、システムは継承リスト内で最初 (左端) に表示されるクラスのメソッドを呼び出します。
メソッドの呼び出し
Basic メソッドは、Basic から呼び出すことができます。
x = obj.MyMethod()
また、ObjectScript から呼び出すこともできます。
Set x = obj.MyMethod()
Basic ルーチンと関数
Basic のルーチン (ObjectScript と類似していますが、Basic を使用して実装されます) を作成し、その内部で 1 つまたは複数の関数を定義することができます。
'MyRoutine.BAS
Function Add(a,b)
Return a + b
End Function
この関数は、Basic から (MyRoutine.BAS ルーチンの外部から) 呼び出すことができます。
x = Add@MyRoutine(2,3)
また、ObjectScript から呼び出すこともできます。
Set x = $$Add^MyRoutine(2,3)
ObjectScript 関数の呼び出し
必要な場合は、Basic から ObjectScript 関数を呼び出すことができます。
通常のオブジェクト構文を使用して、ObjectScript で実装されたオブジェクト・メソッドを Basic から呼び出すことも、その逆も可能です。
ObjectScript 外部関数
Basic から ObjectScript のユーザ定義 (外部) の関数を呼び出す必要がある場合は、特殊構文を使用して呼び出すことができます。
val = Func@Routine(args)
ここで、Func は関数名で、Routine は関数を含むルーチン名です。
例えば、ObjectScript ルーチン Math.INT があるとします。
; Math.INT
Add(a,b) PUBLIC {
Quit a + b
}
この関数を、以下のように Caché Basic から呼び出すことができます。
val = Add@Math(a,b)
これは、以下の ObjectScript コードと同じものです。
Set val = $$Add^Math(.a,.b)
Basic と ObjectScript の相違点は以下のとおりです。
-
Basic では、Set コマンドは必要ありません。
-
Basic では、値を返す関数に対して、$$ を使用する必要はありません。
-
Basic では、関数名とルーチン名の間に区切り文字として “@” を使用します。
-
Basic ではすべての関数引数は、既定で参照によって渡されます。
Basic で値によって引数を渡す場合は、ByVal 指示文を使用する必要があります。
val = Add@Math(ByVal a, ByVal b)
ObjectScript 内部関数
組み込み (内部) ObjectScript 関数 ("Caché ObjectScript リファレンス" の “ObjectScript 関数” のセクションにリストされている関数など) を Basic から直接呼び出すことはできません。しかし、必要な関数を呼び出す単純な ObjectScript 関数やメソッドを作成し、それを Basic から呼び出すことができます。
例えば、以下の ObjectScript 関数は、$ZCOS を起動して、指定した値のコサインを取得します。
; MyMathUtils.INT
COS(arg) PUBLIC {
; Return the cosine of the argument
Quit $ZCOS(arg)
}
この関数を、以下のように Caché Basic から呼び出すことができます。
PrintLn "The cosine is " & COS@MyMathUtils(x)