変数とは値を一時的に覚えておくためのものです。 イメージとしては、メモリ領域に確保された「箱」が変数であり、その中身が「変数の値」と言うような感じです。
変数は宣言をしないと使えません。 宣言とは「これからこういう変数を使うから、その準備をしなさい」とコンピュータに命令をするようなものです。 宣言に際して、変数の名前と「型」を決めなければなりません。
変数の名前は、値を入れておく箱の名前のことです。 たとえば、「年齢という数値を扱うための変数にはageという名前を付けることにする」とすれば、その変数はageという名前になります。
一方、型とは変数の扱える値の種類のことです。 たとえば、整数や実数、または文字などです。 この名前と型をもって変数を宣言する必要があります。
変数の宣言
変数の宣言はVB6からと概ね変わりありません。 宣言の構文は次の通りです。
Dim 変数の名前 As 型
次の例で宣言されている型はすべてVB.NETでのプリミティブ型(組み込み型)です。
' 整数型
Dim b As Byte ' 8ビット符号なし
Dim sh As Short ' 16ビット符号付き
Dim i As Integer ' 32ビット符号付き
Dim l As Long ' 64ビット符号付き
' 実数型
Dim s As Single ' 単精度 (32ビット)
Dim d As Double ' 倍精度 (64ビット)
Dim dc As Decimal ' 10進型 (128ビット)
Dim c As Char ' 文字型 (16ビット符号なし整数)
Dim str As String ' 文字列型
Dim bln As Boolean ' ブール型 (16ビット)
Dim dt As Date ' 日付型 (32ビット)
Dim obj As Object ' オブジェクト型
VB.NETから新たに加わった型は、Short, Decimal, Char, Objectです。 また、Integer型は16ビットから32ビットへと変わりました。 それに伴いLong型も32ビットから64ビットへ格上げされました。
プリミティブ型
VB.NETでのプリミティブ型の表記は、すべて.NET Frameworkで定義された型の別名になっています。 次の二つのコードは表記が異なるだけで全く同じ意味です。
Dim b As Byte
Dim sh As Short
Dim i As Integer
Dim l As Long
Dim s As Single
Dim d As Double
Dim dc As Decimal
Dim c As Char
Dim str As String
Dim bln As Boolean
Dim dt As Date
Dim obj As Object
Dim b As System.Byte
Dim sh As System.Int16
Dim i As System.Int32
Dim l As System.Int64
Dim s As System.Single
Dim d As System.Double
Dim dc As System.Decimal
Dim c As System.Char
Dim str As System.String
Dim bln As System.Boolean
Dim dt As System.DateTime
Dim obj As System.Object
プリミティブ型はVB.NETに固有な型であるように見えますが、内部的にはC#など.NET Frameworkを使用する他の言語からも共通して使われる型と同じです。 また、これらのプリミティブ型はすべて構造体もしくはクラスになっていて、メソッドやプロパティを備えています。 これらの型の種類と値域などの詳細については、型の種類・サイズ・精度・値域で詳しく解説しています。
宣言と代入
Dimステートメントを用いて一行で複数の変数を宣言する場合、カンマで区切ることで宣言することができます。
Dim a As Integer, b As Integer, c As Integer
次のコードは同じ意味になります。
Dim a, b, c As Integer
VB6ではこの宣言方法を使用すると、aとbはVariant型になりましたが、VB.NETではすべてInteger型として宣言されます。
また、異なる型の変数も一行で宣言することができます。
Dim i As Integer, s As Single, str As String
Dim b As Byte, sh As Short, l As Long
さらに、VB.NETでは宣言と代入を同時に行えるようになっています。
Dim a As Integer = 2
Dim b As Integer = 7
Dim c As Integer = 15
Dim a As Integer = 2, b As Integer = 7, c As Integer = 15
上の三行と下の一行は等価です。 それぞれaに2、bに7、cに15が代入されます。
定数以外の値、たとえば変数の値でも代入することができます。 この例ではすべての変数が2に初期化されます。
Dim a As Integer = 2
Dim b As Integer = a
Dim c As Integer = b
このようにVB.NETではCやC#のような変数の宣言が可能になっています。
定数
定数を宣言するにはConstを用います。 定数として宣言された値は変更することができません。
Dim i As Integer = 7
Const ci As Integer = 2
i = 15
ci = 15 ' BC30074: 定数を代入式のターゲットにすることはできません。
サフィックス
変数や定数を宣言する時に値の型をより厳密にするためにサフィックスを付けることが出来ます。 デフォルトでは整数値はInteger、実数値はDoubleとみなされますが、LongやSingleと明示した上で代入したい場合などはそれぞれ次のように型を表す記号を値の後ろに付けます。
Dim i As Integer = 7 ' サフィックスなし(Integer型の値)
Dim l As Long = 100000000000L ' Long型の値であることを明示するサフィックス付き
Dim d As Double = 3.1415926535 ' サフィックスなし(Double型・倍精度の値)
Dim s As Single = 3.1416F ' Single型(単精度)の値であることを明示するサフィックス付き
Dim str As String = "あいう" ' サフィックスなし(String型・文字列)
Dim ch As Char = "あ"c ' Char型(文字)であることを明示するサフィックス付き
VBで指定できるサフィックスの一覧はリテラルとサフィックス §.サフィックスを参照してください。
静的変数
静的な変数を宣言するにはStaticを用います。 静的変数は、そのスコープから抜けても変数の値を保持し続けます。
Sub Main()
' 一度呼び出します
StaticValue()
LocalValue()
' もう一度呼び出します
StaticValue()
LocalValue()
End Sub
Sub StaticValue()
Static i As Integer = 0
i += 1
Console.WriteLine(i)
End Sub
Sub LocalValue()
Dim i As Integer = 0
i += 1
Console.WriteLine(i)
End Sub
1 1 2 1