Ifステートメント
Ifステートメントの構文
Ifステートメントは条件式で記述された条件が成り立っているかどうかを判断し、実行する処理を分岐させるための構文です。 Ifステートメントの構文の形式は次の通りです。 [ ]でくくった部分は省略することが可能な箇所です。
If 条件式 Then
[条件式が成り立っているときに実行するステートメント]
End If
If 条件式 Then
[条件式が成り立っている時に実行するステートメント]
Else
[条件式が成り立っていない時に実行するステートメント]
End If
If 条件式1 Then
[条件式1が成り立っている時に実行するステートメント]
ElseIf 条件式2 Then
[条件式2が成り立っている時に実行するステートメント]
ElseIf 条件式3 Then
[条件式3が成り立っている時に実行するステートメント]
:
:
[Else
どの条件式にも当てはまらない時に実行するステートメント]
End If
このようにIf ... ThenとEnd Ifの間の部分に条件式が成り立っている場合に実行するステートメントを記述します。 ElseIf ... Thenは最初のIf、またはひとつ前のElseIfの条件式が成り立っていない場合に判定する条件文および実行するステートメントを記述するためのものです。 Elseは他のどの条件文も成り立っていない場合に実行するステートメントを記述するためのものです。
If ... ThenおよびIf ... Then ... Elseは、次のように条件式と実行するステートメントを1行で記述することもできます。 この場合、End Ifは不要です。
If 条件式 Then [条件式が成り立っているときに実行するステートメント]
If 条件式 Then 条件式が成り立っている時に実行するステートメント [Else 条件式が成り立っていない時に実行するステートメント]
Ifステートメントの例
以下の例はIfステートメントを使って、変数に格納されている値によって実行する処理を変える例です。
Dim i As Integer = 3
' 1行形式のIfステートメントの例
If i = 3 Then Console.WriteLine("i は 3 です。")
' 条件式が成り立っている場合とそうでない場合のそれぞれで実行する処理を分ける例
If i = 5 Then
' 条件式が成り立っている(iが5の場合)に実行する処理
Console.WriteLine("i は 5 です。")
Else
' 条件式が成り立っていない(iが5ではない場合)に実行する処理
Console.WriteLine("i は 5 ではありません。")
End If
' 複数の条件と対応する処理を分ける例
If i = 5 Then
' Ifの条件式(i = 5)が成り立っている場合に実行する処理
Console.WriteLine("i は 5 です。")
' 最初のIfの条件式が成り立っていない場合に判定する条件式
ElseIf i = 2 Then
' ElseIfの条件式(i = 2)が成り立っている場合に実行する処理
Console.WriteLine("i は 2 です。")
Else
' どの条件式も成り立っていない場合に実行する処理
Console.WriteLine("i は 5 でも 2 でもありません。")
End If
i は 3 です。 i は 5 ではありません。 i は 5 でも 2 でもありません。
条件式と演算子
条件式で数値の比較を行うには、=, <>, <=などの比較演算子を使います。
Dim i As Integer = 2
If i = 3 Then Console.WriteLine("i は 3 です。")
If i < 5 Then Console.WriteLine("i は 5未満 です。")
If i <> 9 Then Console.WriteLine("i は 9 ではありません。")
文字列の比較にも=や<>などの演算子が使える他、Stringクラスの検索・比較メソッドを使うこともできます。
Dim s As String = "あいうえお"
If s = "abc" Then Console.WriteLine("s は 'abc' です。")
If s.StartsWith("ABC") Then Console.WriteLine("s は 'ABC' で始まる文字列です。")
If s.Contains("あ") Then Console.WriteLine("s には 'あ' が含まれています。")
オブジェクト同士やヌル参照の比較を行う場合にはIsやTypeOfなどを使って条件式を記述します。
Dim s As String = "ABC"
If s Is Nothing Then Console.WriteLine("s はヌル参照です。")
If TypeOf s Is String Then Console.WriteLine("s は文字列型です。")
If TypeOf s Is String() Then Console.WriteLine("s は文字列型の配列です。")
各演算子やメソッドの詳細については各ページを参照してください。
条件式の結合
条件式を結合するにはAndAlso演算子およびOrElse演算子を用います。 条件「XかつY」はX AndAlso Y、「XまたはY」はX OrElse Yと記述します。 また、条件の否定にはNot演算子を用います。 条件「Xではない」はNot Xと記述します。
Dim i As Integer = 3
If 2 <= i AndAlso i < 5 Then
Console.WriteLine("i は 2以上 かつ 5未満の数値です。")
End If
If i < 5 OrElse 10 <= i Then
Console.WriteLine("i は 5未満 または 10以上の数値です。")
End If
If Not i = 5 Then ' i <> 5 と同じ
Console.WriteLine("i は 5 以外の数値です。")
End If
i は 2以上 かつ 5未満の数値です。 i は 5未満 または 10以上の数値です。 i は 5 以外の数値です。
なお、AndAlso演算子・OrElse演算子はショートサーキットによる評価を行います。
論理演算子の詳細については論理演算子を参照してください。
複数の条件式
IfステートメントではElseIfにより条件式を複数記述することができます。
Dim i As Integer = 3
If i = 1 Then
' iが1の場合
ElseIf i = 2 OrElse i = 3 Then
' iが2または3の場合
ElseIf i = 4 Then
' iが4の場合
Else
' それ以外の場合
End If
一方、上記の例のように多数の条件で場合分けをする場合はSelectステートメントを使うこともできます。
Dim i As Integer = 3
Select i
Case 1
' iが1の場合
Case 2, 3
' iが2または3の場合
Case 4
' iが4の場合
Case Else
' それ以外の場合
End Select
SelectステートメントについてはSelect Caseステートメントを参照してください。
入れ子
Ifステートメントの中にIfステートメントを記述する、つまりIfステートメントを入れ子にすることにより、ある条件が成り立っている場合にさらに追加の条件で分岐を行うようにすることもできます。
Dim i As Integer = 3
' 最初の条件式
If i <> 5 Then
Console.WriteLine("i は 5 ではありません。")
' 入れ子にしたIfステートメントで、さらに条件分岐を行う
If i <= 2 Then
Console.WriteLine("i は 2 以下です。")
Else
Console.WriteLine("i は 2 より大きいです。")
End If
End If
i は 5 ではありません。 i は 2 より大きいです。
入れ子のIfステートメントは複数の条件をAND結合したものと同じなので、AndAlso演算子を使って1つのIfステートメントで記述することができます。 例えば、次の二つのIfステートメントはどちらも同じ動作となります。
Dim i As Integer = 3
' 入れ子にしたIfステートメント
If 2 <= i Then
If i < 5 Then
Console.WriteLine("i は 2以上 かつ 5未満の数値です。")
End If
End If
' 先のIfステートメントと同じ動作をする条件式のIfステートメント
If 2 <= i AndAlso i < 5 Then
Console.WriteLine("i は 2以上 かつ 5未満の数値です。")
End If
If演算子
VB.NET 2008(Visual Studio 2008)からはCやC#の三項演算子~?~:~と同様の機能を持つIf演算子がサポートされるようになりました。 この演算子を使うことにより、条件分岐と値の代入を1行で行うことができるようになります。
Dim num As Integer = 3
Dim oddeven As String
' 数が奇数か偶数か判別して文字列に代入する
If num Mod 2 = 0 Then
oddeven = "偶数"
Else
oddeven = "奇数"
End If
Console.WriteLine("{0} は {1} です", num, oddeven)
' Ifステートメントを使って数が奇数か偶数か判別した結果を文字列に代入する
' (上記のIfステートメントと同等のコード)
oddeven = If(num Mod 2 = 0, "偶数", "奇数")
Console.WriteLine("{0} は {1} です。", num, oddeven)
3 は 奇数 です。 3 は 奇数 です。
If演算子について詳しくは論理演算子 §.If演算子で解説しています。
#Ifディレクティブ
VB.NETには条件付きのコンパイルを行うための#Ifディレクティブというものがあります。 Ifステートメントと似ていますが、機能はまったく異なります。 Ifステートメントは実行時の条件分岐を行うためのものですが、#Ifディレクティブはコンパイル時の条件分岐を行うためのものです。 次の例は、#Ifディレクティブを使った例です。
#If DEBUG Then
Console.WriteLine("このメッセージはDebug構成の場合にのみ表示されます。")
#Else
Console.WriteLine("このメッセージはDebug構成以外(Release構成)の場合にのみ表示されます。")
#End If
#Ifディレクティブについて詳しくはコンパイラ定数と条件付きの呼び出しを参照してください。