2010/01/10

[ASP][VBScript]ByValとByRefの違い

長年悩んでいた悩みがついに解決

ASPでよく使われるByValとByRefの違いがどうしてもわかりませんでした。

そこで、下記のプログラムを作って検証してみることに

Sub Test1(ByVal arg1)
arg1 = "Test1により値が変わりました"
End Sub

Sub Test2(ByRef arg2)
arg2 = "Test2により値が変わりました"
End Sub

hoge = "Test"

Response.Write(hoge)
Response.Write("<br>")

Call Test1(hoge)
Response.Write(hoge)
Response.Write("<br>")

Call Test2(hoge)
Response.Write(hoge)

結果は

Test

Test


Test2により値が変わりました

となりました。

このことから、ByValは引数の値を変更せず、一方、ByRefは引数の値を変更してしまうことがわかりました。

これは、PL/SQLと対応させるとわかりやすいかもしれません。

ASP   |  PL/SQL
----------------

ByRef | in out

ByVal | in

とすれば、いざ、実装するにあたり、どちらがどっちとイチイチ悩む必要はなくなります。

ByVal と ByRefを読むと、ByRefは、「参照渡し」でByValは「値渡し」と書かれていますが、そこまで意識する必要なく上の対応表で考えればすむのかなと。

0 コメント:

コメントを投稿