■ 変数宣言の変更
- Option Explicit On がデフォルト
- Dim x, y, z As String
- ブロック内の変数のスコープ
Option Explicit (変数宣言の強制)
変数宣言を強制するために、Option Explicit On を利用します。また、Visual Basic .NET では 「Option Explicit On」 がデフォルトになりました。つまり変数宣言を強制されたくない場合には、Option Explicit Off と明示的にソースコードに記述する必要があります。
変数宣言時の型指定
Dim x, y, z As String
この宣言は、Visual Basic 6.0 では、2 つの Variant 型データ (x と y) と、ひとつの String 型データ (z) の生成を意味します。
Visual Basic .NET では、この宣言で 3 つの String 型データが生成されます。
変数のスコープ
Visual Basic 6.0 では、ローカル変数の宣言が含まれている行からプロシージャの末尾まで、ローカル変数を参照することができます。
Visual Basic .NET では、ブロック内で宣言されている変数は、そのブロック内のみ利用可能です (リスト 1)。
リスト 1:VB .NET の変数スコープ
変数宣言が強制されている場合、スコープ外での変数の利用はコンパイルエラーになります。
If ステートメントの場合は If の中で宣言したデータを利用できるのは If から Else までになります。
ただし、同じ名前の変数の宣言は、プロシージャの中で 1 度だけしかできません。したがってリスト 2 のコードはコンパイルエラーになります。
Option Explicit On
(略)
Sub Proc1()
Dim a As String
Dim x As Integer
If x = 100 Then
Dim a As String
a = "Hello"
End If
End Sub
リスト 2:変数名はプロシージャの中で1度だけ
[Visual Basic 6.0 のコード]
Dim x, y, z As String
[Visual Basic .NET にアップグレード]
Dim x, y As Object
Dim z As String
また、Visual Basic 6.0 で以下のようにブロック内で宣言していたデータは、
Sub Proc1()
Dim x As Short
If x = 100 Then
Dim a As String
a = "Hello"
Else
a = "Hi"
End If
a = "Hi"
End Sub
リスト 3 のように、アップグレードウィザードがブロックの外で宣言するように変更してくれます。
リスト3:スコープの変更を考慮したコードの変更 (アップグレードウィザード)
Visual Basic 6.0 でも変数は適切なデータ型を指定して宣言することが推奨されていました。Visual Basic .NET では、Option Explicit On がデフォルトになります。つまり、Visual Basic 6.0 でも適切なデータ型を指定しておくことで、Visual Basic .NET での変更を最小限に抑えることができます。