■ プロシージャ
- 引数のデフォルトは ByVal
- プロシージャの Static キーワードはサポートされない
- プロシージャの呼び出しには "()" を付ける
引数のデフォルトは ByVal
Visual Basic 6.0 では、特に指定をしない場合、引数は ByRef となりましたが、Visual Basic .NET では ByVal になります。 Visual Studio .NET では、混乱を防ぐために、型を指定しないと自動的に ByVal が追加されるようになっています。
Static プロシージャ
Visual Basic 6.0 でプロシージャに Static キーワードを指定すると、プロシージャ内のローカル変数が Static 変数になり、変数をコール間で共有することができました。 Visual Basic .NET ではプロシージャに対して Static キーワードを指定することはできなくなりました。Static 変数にしたいときは、変数宣言時に個別に指定します。
プロシージャの呼び出し
プロシージャの呼び出しの時は引数を必ず "(" と ")" で囲みます。引数がない場合は、() は任意ですが、Visual Studio .NET のコードエディタは自動的に () を追加します。
引数のタイプを指定しない場合、Visual Basic 6.0 では ByRef を意味します。そのため、Visual Basic 6.0 による、
Sub Proc1(ByVal x As Integer, ByRef y As Integer, z As Integer)
z = x + y
End Sub
というコードの第 3 引数の 「z」 は、アップグレードウィザードによって、以下のように ByRef が明示的に追加されます。
Sub Proc1(ByVal x As Short, ByRef y As Short, ByRef z As Short)
z = x + y
End Sub
これは、何も書いていないと、Visual Basic .NET では ByVal を意味してしまうためです。
また、これを呼び出すための、
Proc1 a, b, c
は、() が追加され次のように変換されます。
Proc1(a, b, c)
Visual Basic では、関数名を利用して戻り値を設定していました。
<関数名> = <戻したい値> (Visual Basic 6.0 と Visual Basic .NET)
Visual Basic .NET もこの方法をサポートしていますが、それに加え、Return キーワードを利用して、
Return <戻したい値> (Visual Basic .NET)
とコーディングすることができるようになりました。これにより、コードの意味が明確になります。
また、Return キーワードを利用すると、実行コードを生成するときに最適化がより適切に行なわれるため、パフォーマンスの面でも優れているといえます。関数名を Return に変えるだけでよいのですから、ぜひ置き換えを行なってください。