ステートメント
注意:
この文書は以前「.NETでいきまっしょい!」で公開していたものですが、公開以降メンテナンスされていません。 今や古い情報となった内容が記載されている場合があるのでご注意ください。
Ifステートメント
Ifステートメントはある条件が成り立っているか判断してプログラムの流れを変えるために使用する構文です。 構文の形式は次の通りです。
・条件が成り立っているときに実行するステートメントが一行の時
If 条件式 Then ステートメント
・条件が成り立っているときに実行するステートメントが0行以上の時
If 条件式 Then
[ステートメント]
End If
・条件が成り立っているときと成り立っていないときに実行するステートメントがある時
If 条件式 Then
[条件式が成り立っている時に実行するステートメント]
Else
[条件式が成り立っていない時に実行するステートメント]
End If
・条件が一つ以上ある時
If 条件式1 Then
[条件式1が成り立っている時に実行するステートメント]
ElseIf 条件式2 Then
[条件式2が成り立っている時に実行するステートメント]
.
.
[Else]
[どの条件式にも当てはまらない時に実行するステートメント]
End If
この構文のうち[]でくくった部分は省略可能な部分です。
001 002 003 004 005 006 007 008 009 010
011 012 013 014 015 016 017 018 019 020
|
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ステートメントを使用することもできます。
001 002 003 004 005 006 007 008 009 010
011 012 013 014 015 016 017
|
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 If
|
| 出力結果 |
i は 5 ではありません。
i は 2 より大きいです。
|
Select Caseステートメント
Select Caseステートメントは、ある値に対してその分類を行い、その分類毎に実行するプログラムを変えるための構文です。 構文の形式は次の通りです。
Select [ Case ] 分類する元の値を保持する変数
[ Case 値
[ ステートメント ] ]
[ Case Else
[ ステートメント ] ]
End Select
Case Elseの部分は、どの分類にも当てはまらなかった場合に実行されます。 次のコードは、1 から 10 までの数値について、(奇数ではなく)素数か偶数かに分類するものです。 Forステートメントについてはこの次の項目を参照してください。
001 002 003 004 005 006 007 008 009 010
011 012 013 014 015 016 017 018
|
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はただ単に素数であるとだけ表示されますが、これは最初の分類に引っかかった後はほかの分類に引っかからないからです。
For〜Nextステートメント
Forステートメントは繰り返す回数が決まっている場合に使用します。 Forステートメントでは今何回繰り返したかを覚えておくためのカウンタ変数が必要になります。 構文の形式は次の通りです。
For カウンタ変数 = 初期値 To 終了値 [Step 増分]
[ステートメント]
Next [カウンタ変数]
Forステートメントでは、まずカウンタ変数を初期値に指定し、増分で指定した分ずつカウンタ変数の値を増やしていきます。 その度にForからNextの間に記述されているすべてのステートメントを実行します。 カウンタ変数が終了値に達するか越えた場合、繰り返しが終了します。 このとき増分を省略すると増分は1とされます。
001 002 003 004 005 006 007 008 009 010
011 012 013 014 015 016 017 018 019 020
021 022
|
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ステートメントから順に繰り返されていきます。
001 002 003 004 005 006 007 008 009
|
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ステートメント内で宣言できるようになりました。
001 002 003 004
|
' 0 から 9 まで 1 ずつ
For i As Integer = 0 To 9
Console.Write(i)
Next
|
このようにして宣言したカウンタ変数は、Forステートメント内のみで有効であることに注意してください。 Forステートメントの外から参照することはできません。
For〜Each〜Nextステートメント
For-Eachステートメントは特定の要素の集まり(コレクション)に対して、そのすべての要素を一つずつ抜き出して繰り返す場合に使用します。 For-Eachステートメントでは抜き出した要素を扱うための変数を用意しておく必要があり、その変数の型は当然要素を格納できる型である必要があります。 構文の形式は次の通りです。
For Each 要素変数 In コレクション
[ステートメント]
Next [要素変数]
基本的にForステートメントと同じなので問題ないと思います。 次のコードは配列に含まれるすべての要素を抜き出して表示するコードです。
001 002 003 004 005 006 007 008 009 010
011 012
|
' 二次元配列
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)からは、ステートメント内で使用できるカウンタ変数をステートメント部で宣言できるようになりました。
001 002 003 004 005 006 007 008 009
|
' 二次元配列
Dim arr(,) As Integer = {{0, 1, 2}, {3, 4, 5}}
' すべての要素について繰り返す
For Each i As Integer In arr
Console.WriteLine(i)
Next
|
While〜While Endステートメント
Whileステートメントは繰り返す回数は決まっていないが、繰り返しを続ける(または、やめる)条件がわかっている場合に使用します。 構文の形式は次の通りです。 ちなみにVB.NETでは他のブロック構造との整合性を保つためにWendはサポートされず、While Endを使わなければなりません。
While 条件式
[ステートメント]
End While
この条件式が成り立っている限り(式が真である限り)繰り返されます。 条件が常に成り立ってしまうようにコーディングすると無限ループしてしまうので注意が必要です(意図的に無限ループにすることもありますが、その場合でも必ずループを中止するためのコードを記述します)。
001 002 003 004 005 006 007 008 009 010
011
|
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ステートメント
Do-LoopステートメントはWhileステートメントと似ていますが、Whileとは異なり様々なバリエーションの条件を付けることができます。 その構文を次に示します。
・先に条件をチェックし、条件が成り立っている間ループを続ける構文
Do While 条件式
[ステートメント]
Loop
・ステートメントを実行した後で条件をチェックし、条件が成り立っている間ループを続ける構文
Do
[ステートメント]
Loop While 条件式
・先に条件をチェックし、条件が成り立つまでループを続ける構文
Do Until 条件式
[ステートメント]
Loop
・ステートメントを実行した後で条件をチェックし、条件が成り立つまでループを続ける構文
Do
[ステートメント]
Loop Until 条件式
・無限にループを繰り返し、ステートメントを実行する構文
Do
[ステートメント]
Loop
一番最後の構文を使用する場合は、何らかの条件が整った時点でExit Do (後述)を用いてループから抜ける必要があります。
001 002 003 004 005 006 007 008 009 010
|
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のように使います。
| Forループで使用した例 |
001 002 003 004 005 006 007 008 009 010
|
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
|
| Doループで使用した例 |
001 002 003 004 005 006 007 008 009 010
011 012 013
|
Dim i As Integer = 0
' 無限ループ
Do
i += 1
Console.WriteLine(i)
' i が 3 になったらループから抜ける
If i = 3 Then Exit Do
Loop
|
| 出力結果 |
1
2
3
|