プロシージャを作って、値渡しと参照渡しの確認をしてみた。
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というものが解ってきた気がする。後は、デフォルトで使用できるであろう定数、メソッド、オブジェクトなどを調べながらコーディングすれば慣れてくるだろう。