論理演算子は複雑にしない
論理演算子 And や Or を組み合わせると、複数の条件式を記述することができ、より複雑な条件文を記述することができます。
いくつでも並べて条件判定ができますが、判定条件が複雑になって、誤り(バグ)の原因になるので、多くの論理演算子を並べないようにプログラムを工夫しましょう。
And 演算子 Or 演算子
以下、a,b,c,d などは変数とします。
次の例では、左側の条件式 a < b と右側の条件式 a> 100 がともに成立したときのみ、Then 以下のプログラムが実行されます。
ソースリストの枠内をクリックすると全選択できます。
Dim a As Integer = 120 Dim b As Integer = 71 If a < b And a > 100 Then
And や Or 演算子は、いくつでも並べて記述することができます。
次の例では、a < b と a>100 と c >= d の3条件式が共に成立したときのみ、Then 以下のプログラムが実行されます。
Dim a As Integer = 120 Dim b As Integer = 71 Dim c As Integer = 5 Dim d As Integer = 28 If a < b And a > 100 And c >= d Then
次の例では、a < b または a>100 または c >= d のいずれかの条件式が成立すれば、Then 以下のプログラムが実行されます。
If a < b Or a > 100 Or c >= d Then
次の例では、条件式 a < b と条件式 a> 100 がともに成立したとき、または、a < b や a> 100 の判定にかかわらず、c >= d が成立したとき、Then 以下のプログラムが実行されます。
条件式 a < b と条件式 a> 100 がともに成立したとき、さらに、c >= d が成立したときも、Then 以下のプログラムが実行されます。
And や Or をたくさん並べて書くと、誤りの原因になります。できるだけ簡潔に書くように心がけましょう。
If a < b And a > 100 Or c >= d Then
And を使ったプログラム
現在の時刻に応じて、メッセージを表示するプログラムを作成します。 たとえば、9時以降(以上)かつ(And)、18時前(未満)ならば、「こんにちは」と表示します。
現在時刻は、System.DateTime.Nowを使って取得できます。時刻の時0~23は、Hour関数の引数に現在時刻System.DateTime.Nowを指定します。
Module Module1 Sub Main() ' 現在時刻の時を取得(0~23) Dim ji As Integer = Hour(System.DateTime.Now) Dim msg As String ' 時刻を判定して処理を振分 If ji >= 0 And ji < 4 Then ' メッセージを作成 msg = "早く寝ましょう" ElseIf ji >= 4 And ji < 9 Then msg = "おはようございます" ElseIf ji >= 9 And ji < 18 Then msg = "こんにちは" ElseIf ji >= 18 And ji < 22 Then msg = "こんばんは" Else ' 22時以降24時未満 msg = "おやすみなさい" End If ' 結果を表示 Console.WriteLine(msg) End Sub End Module
Not 演算子
Not 論理演算子は、Not以下の条件判定式を否定します。
次の例では、a < b でないとき、Then 以下のプログラムが実行されます。
If a >= b Then と同じです。こちらのほうが分かりやすい。できるだけ分かりやすいプログラムを書くようにします。
If Not(a < b) Then
次の例では、a < b かつ a >100 でないとき、Then 以下のプログラムが実行されます。だんだん分かりにくくなってきましたね。論理演算子は注意して使いましょう。
If Not(a < b And a > 100) Then