if文
条件分岐
これまでのプログラムは常に逐次実行するだけでした。 状態に応じて結果が変化するプログラムを作成するには、コードの流れを制御する必要があります。
プログラムを分岐させるには if 文(if statement)を用います。 前述したブーリアン型の true と false という論理値が、ここで役に立ちます。
if (条件式) 文
条件式には bool 型の式を指定します。この値が ture であれば文を実行し、false であれば文を実行せずに次のステップに移行します。
if (true) System.Console.WriteLine("実行される文"); if (false) System.Console.WriteLine("実行されない文");
条件式には bool 型が必要なので、多くの場合は比較演算を書くことになるでしょう。
C/C++ ではブーリアンを 0 ならば偽、それ以外ならば真と判断していましたが、C# は型として独立しているため、expression に数値型を指定できないことに注意してください。
class Test { static void Main() { int x = 10; if (x <= 100) System.Console.WriteLine("x は 100 以下"); if (x > 100) System.Console.WriteLine("x は 100 より大きい"); } }
コード1は、変数 x が 100 と同じかそれ以下の場合と、100 より大きい場合で表示する文字列が変わるプログラムです。
else部分
if 文は「もし…ならば…する」という流れを実現しますが、これに「そうでなければ…する」という動作を追加させたい場合もあるでしょう。if 文を追加して前の if の条件を否定するという方法もありますが、確実な方法ではなくリスクを含みます。
if (x) //x が true の時の処理... if (!x) // x が false の時の処理...
多くの場合、これでも問題なく動作すると思われますが、確実ではありません。例えば x が true の時の処理の中に x を false に書き換えるような処理が含まれれば、次の if 文も意図しない形で実行されてしまう可能性があります。同質の条件を二重に評価しているという点で、処理にも無駄があります。
if 文に指定した条件の結果が false だった時の処理も記述したい場合は、else 部分(else part)を追加します。
if (条件式) 文1 else 文2
else 部分を持つ if 文は、条件式が true であれば文1が実行され、そうでなければ else キーワードの後にある文2が実行されます。
これによって、完全に 2 分岐する流れを実現できます。
class Test { static void Main() { int x = 481; if (x <= 100) System.Console.WriteLine("x は 100 以下"); else System.Console.WriteLine("x は 100 より大きい"); } }
コード2は if 文の条件によって結果が分岐するプログラムです。
else 部分は if 文の一部であり、if 文に関連付けられていなければなりません。 else 部分に対応する if 文が見つからない場合はコンパイルエラーとなります。
複数の if 文を重ねて多数の分岐を実現することもできます。
if (x) if (y) ...
実際に複雑な階層に分かれる処理を記述する方法として利用されます。
class Test { static void Main() { int x = 1; if (x == 0) System.Console.WriteLine("汝のあるべき姿に戻れ"); else if (x == 1) System.Console.WriteLine("これが私の全力全開!"); else System.Console.WriteLine("もう何も恐くない"); } }
このプログラムは x の値が 0、1、それ以外の 3 パターンに分岐します。 x の値をそれぞれの値に変更してコンパイルすると確認できます。
コード3の各 else キーワードは前方の if キーワードに対応しています。最後の else 部分に対応する文は、全ての条件が偽だった時に実行することになります。