プロシージャを作って、値渡しと参照渡しの確認をしてみた。
Dim foo foo = "Hello" SetBye(foo) MsgBox foo Sub SetBye(ByRef foo) foo = "Bye" End Sub
「ByRef」という修飾子で参照渡しとなって、デフォルトなので省略も可。「ByVal」という修飾子を付けると値渡しになる。上のコードを実行したところ
Hello
と表示された。参照渡しが機能していない。ちゃんとしたドキュメントを確認していないが、プロシージャの呼び出しを
Call SetBye(foo)
と「Call」で呼び出すことで解決した。VBScriptはデフォルトで宣言していない変数を使うことが出来るが、これを嫌う場合は「Option Explicit」というステートメントがある。
Option Explicit foo = "Hello"
これは「foo」が宣言されていないのでエラーになる。
プロシージャが解ったところで、クラスにも挑戦。
<script type="text/VBScript"> Option Explicit Class Point Private x Private y Private Sub Class_Initialize x = 0 y = 0 End Sub Private Sub Class_Terminate MsgBox("Class_Tarminate") End Sub Public Sub SetPoint(inX, inY) x = inX y = inY End Sub Public Sub Print() MsgBox("x:" & x & ", y:" & y) End Sub End Class Dim p Set p = new Point p.Print() p.SetPoint 100, 200 p.Print() Set p = Nothing </script>
フィールドを用意して値の設定が行われることを確認できたが、作成中に色々エラーが出た。プロシージャを呼び出すときに
p.SetPoint(100, 200)
と書くとエラーになる。括弧は使えないようだ。
その他、オブジェクトの代入には「Set」が必要で
Dim p p = new Point
と書くとエラーになる。
コンストラクタに相当するもの(まだ継承があるのかも知らないので、コンストラクタと呼ぶに相応しいのかわからないが)として、「Class_Initialize」というメソッドがあり、終了時には「Class_Terminate」と命名されたメソッドが呼び出されるようだ。
JavaでいうObjectクラスのメソッドのようなものだろうか。
最後に変数pの参照をなくして「Class_Terminate」を呼び出すために
Set p = Nothing
とした。最初は山勘で
Set p = null
とか書いてみたが、エラーになったので調べたところ「Nothing」という書き方が見つかった。
アクセス修飾子の細かい仕様などはわかっていないけれど、なんとなくVBScriptというものが解ってきた気がする。後は、デフォルトで使用できるであろう定数、メソッド、オブジェクトなどを調べながらコーディングすれば慣れてくるだろう。