2006年09月08日

LotusScript に対する不満?(2) Variant

さて Variant型 に関する不満(?)です。 いや嫌いじゃないんですけどね。

使うたびに頭の中で 三石琴乃さん (マリュー・ラミアス大尉)の、「ヴァリアント、てー!」という声が響くんですよね〜 というのは嘘で。

どうも馴染めないのは、あまりに柔軟すぎるから、だとおもいます。 Variant を利用すると途端に、静的な事前チェックがほとんどできなくなる気がします。

Variant 型にもクラスのインスタンスを代入できます。 代入されたのがどのクラスかは IsA 演算子 で確認できますが、なんと! クラスそのものではなく、クラス名(文字列)と比較しているような気が。 あらビックリ。

この面白さが伝わるかどうか不明ですが、サンプルを見てみてください。 まず、適当にアクションボタンでも作成して、(Declarations) セクションに2つの適当な(ありがちな!)クラスを定義します。
Class Cat
Sub test
Msgbox |nya-|
End Sub
End Class

Class Dog
Sub test
Msgbox |bow!|
End Sub
End Class

以下のように実行部分を記述して、クラスの動作を確かめてみましょう。 ま、動かなかったら困りますね。
Sub Click(Source As Button)
Dim aCat As New Cat
Dim aDog As New Dog

Call aCat.test
Call aDog.test
End Sub

さて、これからが面白い(たぶん)ところです。 以下のような Function を追加してみます。 Panda クラスという、どこにも定義していないクラスを利用していますが、特にエラーにはなりません。
Sub doTest(target As Variant) 
If target Isa "Panda" Then
Call target.test
Call target.testPanda
Elseif target Isa "Cat" Or target Isa "Dog" Then
Call target.test
End If
End Sub

念のため、以下のように実行部分を書き換えて実行すると、何事もなかったように動きます。
Sub Click(Source As Button)
Dim aCat As Variant
Dim aDog As Variant

Set aCat = New Cat
Set aDog = New Dog

Call doTest(aCat)
Call doTest(aDog)
End Sub

なんといいますか、Variant が入ることで、事前の静的なチェックがされなくなってるような。メソッド実行が単に実行時に 名前で 処理されているような、アバウトな雰囲気を感じるんですよね。

その反面、Java のように Interface を用意しなくても、名前さえあわせておけば、全然関係ないクラスのメソッドを自由に呼び出せたりしそうで、ニヤニヤしてしまいます。 かなーり変態的なコードが書けそうなニオイがするというか。

んー、楽しそう。

ちなみに、僕は普段 "Option Declare" を指定せずに、宣言しない変数を使った LotusScript を書いたりしてます。 Variant がどうこうなどと、あまり偉そうなことは言えない立場なのかも? (^-^;
posted by yamachan at 00:24| Comment(0) | TrackBack(0) | 雑談
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/1235144

この記事へのトラックバック