VBScriptのお勉強 3

プロシージャを作って、値渡しと参照渡しの確認をしてみた。

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

コメントする

メールアドレスが公開されることはありません。