ここではVB.NETのステートメントについて見ていきます。
Ifステートメントはある条件が成り立っているか判断してプログラムの流れを変えるために使用する構文です。 構文の形式は次の通りです。
If 条件式 Then ステートメント
If 条件式 Then [ステートメント] End If
If 条件式 Then [条件式が成り立っている時に実行するステートメント] Else [条件式が成り立っていない時に実行するステートメント] End If
If 条件式1 Then [条件式1が成り立っている時に実行するステートメント] ElseIf 条件式2 Then [条件式2が成り立っている時に実行するステートメント] : : [Else] [どの条件式にも当てはまらない時に実行するステートメント] End If
この構文のうち[]でくくった部分は省略可能な部分です。
Dim i As Integer = 3 If i = 3 Then Console.WriteLine("i は 3 です。") If i = 5 Then Console.WriteLine("i は 5 です。") Else Console.WriteLine("i は 5 ではありません。") End If If i = 5 Then Console.WriteLine("i は 5 です。") ElseIf i = 2 Then Console.WriteLine("i は 2 です。") Else Console.WriteLine("i は 5 でも 2 でもありません。") End If
i は 3 です。 i は 5 ではありません。 i は 5 でも 2 でもありません。
また、Ifステートメントの中でさらにIfステートメントを使用することもできます。
Dim i As Integer = 3 If i <> 5 Then Console.WriteLine("i は 5 ではありません。") If i <= 2 Then Console.WriteLine("i は 2 以下です。") Else Console.WriteLine("i は 2 より大きいです。") End If End If5 Then Console.WriteLine("i は 5 ではありません。") If i <= 2 Then Console.WriteLine("i は 2 以下です。") Else Console.WriteLine("i は 2 より大きいです。") End If End If]]>
i は 5 ではありません。 i は 2 より大きいです。
Select Caseステートメントは、ある値に対してその分類を行い、その分類毎に実行するプログラムを変えるための構文です。 構文の形式は次の通りです。
Select [ Case ] 分類する元の値を保持する変数 [ Case 値 [, 値 [, 値 ... ] ] [ ステートメント ] ] [ Case Else [ ステートメント ] ] End Select
Case Elseの部分は、どの分類にも当てはまらなかった場合に実行されます。 次のコードは、1から10までの数値について、(奇数ではなく)素数か偶数かに分類するものです。 Forステートメントについてはこの次の項目を参照してください。
Dim i As Integer For i = 1 To 10 Select Case i Case 2, 3, 5, 7 Console.WriteLine("{0} は素数です。", i) Case 2, 4, 6, 8, 10 Console.WriteLine("{0} は偶数です。", i) Case Else Console.WriteLine("{0} は偶数でも素数でもありません。", i) End Select Next
1 は偶数でも素数でもありません。 2 は素数です。 3 は素数です。 4 は偶数です。 5 は素数です。 6 は偶数です。 7 は素数です。 8 は偶数です。 9 は偶数でも素数でもありません。 10 は偶数です。
この実行結果から分かるとおり、偶数でも素数でもある2はただ単に素数であるとだけ表示されますが、これは最初の分類に引っかかった後はほかの分類に引っかからないからです。 すなわち、VB.NETのCaseはCなどのcaseラベルとは異なりフォールスルーしません。
Forステートメントは繰り返す回数が決まっている場合に使用します。 Forステートメントでは今何回繰り返したかを覚えておくためのカウンタ変数が必要になります。 構文の形式は次の通りです。
For カウンタ変数 = 初期値 To 終了値 [Step 増分] [ステートメント] Next [カウンタ変数]
Forステートメントでは、まずカウンタ変数を初期値に指定し、増分で指定した分ずつカウンタ変数の値を増やしていきます。 その度にForから Nextの間に記述されているすべてのステートメントを実行します。 カウンタ変数が終了値に達するか越えた場合、繰り返しが終了します。 このとき増分を省略すると増分は1とされます。
Dim i As Integer ' カウンタ変数 ' 0 から 9 まで 1 ずつ For i = 0 To 9 Console.Write(i) Next i Console.WriteLine() ' 9 から 0 まで -1 ずつ For i = 9 To 0 Step -1 Console.Write(i) Next Console.WriteLine() ' 0 から 9 まで 2 ずつ For i = 0 To 9 Step 2 Console.Write(i) Next Console.WriteLine()
0123456789 9876543210 02468
ForステートメントではForステートメントの中にさらにForステートメントを含めることもできます。 この場合、内側のForステートメントから順に繰り返されていきます。
Dim i, j As Integer ' カウンタ変数 ' i が 0 から 2 まで 1 ずつ For i = 0 To 2 ' j が 0 から 2 まで 1 ずつ For j = 0 To 2 Console.WriteLine("{0}, {1}", i, j) Next Next
0, 0 0, 1 0, 2 1, 0 1, 1 1, 2 2, 0 2, 1 2, 2
VB.NET 2003 (Visual Studio .NET 2003)からは、次の例のようにForステートメントで使用できるカウンタ変数をForステートメント内で宣言できるようになりました。
' 0 から 9 まで 1 ずつ For i As Integer = 0 To 9 Console.Write(i) Next
このようにして宣言したカウンタ変数は、Forステートメント内のみで有効であることに注意してください。 Forステートメントの外から参照することはできません。
For-Eachステートメントは特定の要素の集まり(コレクション)に対して、そのすべての要素を一つずつ抜き出して繰り返す場合に使用します。 For-Eachステートメントでは抜き出した要素を扱うための変数を用意しておく必要があり、その変数の型は当然要素を格納できる型である必要があります。 構文の形式は次の通りです。
For Each 要素変数 In コレクション [ステートメント] Next [要素変数]
基本的にForステートメントと同じなので問題ないと思います。 次のコードは配列に含まれるすべての要素を抜き出して表示するコードです。
' 二次元配列 Dim arr(,) As Integer = {{0, 1, 2}, {3, 4, 5}} ' 抜き出した要素を格納するための変数 Dim i As Integer ' すべての要素について繰り返す For Each i In arr Console.WriteLine(i) Next
0 1 2 3 4 5
Forステートメント同様、For-EachステートメントでもVB.NET 2003 (Visual Studio .NET 2003)からは、ステートメント内で使用できる要素変数をステートメント部で宣言できるようになりました。
' 二次元配列 Dim arr(,) As Integer = {{0, 1, 2}, {3, 4, 5}} ' すべての要素について繰り返す For Each i As Integer In arr Console.WriteLine(i) Next
Whileステートメントは繰り返す回数は決まっていないが、繰り返しを続ける(または、やめる)条件がわかっている場合に使用します。 構文の形式は次の通りです。 ちなみにVB.NETでは他のブロック構造との整合性を保つためにWendはサポートされず、While Endを使わなければなりません。
While 条件式 [ステートメント] End While
この条件式が成り立っている限り(式が真である限り)繰り返されます。 条件が常に成り立ってしまうようにコーディングすると無限ループしてしまうので注意が必要です(意図的に無限ループにすることもありますが、その場合でも通常はループを中止するためのコードを記述します)。
Dim i As Integer = 0 ' i が 10 未満の間はループを繰り返す While i < 5 Console.WriteLine(i) ' i を 1 増やす i += 1 End While
0 1 2 3 4
Do-LoopステートメントはWhileステートメントと似ていますが、Whileとは異なり様々なバリエーションの条件を付けることができます。 その構文を次に示します。
Do While 条件式 [ステートメント] Loop
Do [ステートメント] Loop While 条件式
Do Until 条件式 [ステートメント] Loop
Do [ステートメント] Loop Until 条件式
Do [ステートメント] Loop
一番最後の構文を使用する場合は、何らかの条件が整った時点でExit Do (後述)を用いてループから抜ける必要があります。
Dim i As Integer = 0 ' i が 5 になるまではループを繰り返す Do Console.WriteLine(i) i += 1 Loop Until i = 5
0 1 2 3 4
ForやWhileなどのステートメントでは、ループの途中でループから抜けることができます。 その場合にはExitを使います。 ForループではExit For、WhileループではExit Whileのように使います。
Dim i As Integer For i = 0 To 9 Console.WriteLine(i) ' i が 5 になったらループを中止 If i = 5 Then Exit For Next
0 1 2 3 4
Dim i As Integer = 0 ' 無限ループ Do i += 1 Console.WriteLine(i) ' i が 3 になったらループから抜ける If i = 3 Then Exit Do Loop
1 2 3