C#のif文、論理演算子(and/or/not)とは?論理演算子(and/or/not)を記述する方法

C#のif文、論理演算子(and/or/not)とは?
今回は、C#のif文と論理演算子(and/or/not)について紹介します。
プログラムを作成する時、「~の場合、~しなさい。ただし~の場合 かつ ~の場合、~しなさい。」というように、条件に応じて処理を分岐したい場面は多いでしょう。C#ではif文が「~の場合、~しなさい。」の役割を、論理演算子(and/or/not)が「かつ」、「または」、「否定」の役割を果たします。
シンプルな構文ですが、if文と論理演算子(and/or/not)をマスターすることで分岐処理を自在に記述でき、作成できるプログラムの幅が広がるため、この記事を読んでマスターしてみましょう。
if文を記述する方法
「~の場合、~しなさい。」の役割を果たすif文の記述について説明します。
C#では次のようにif文を記述します。
1 2 3 4 5 |
if (条件式) { 処理内容 } |
条件式には、結果がtrueまたはfalseになる式を記述します。処理内容には、if条件でtrueになった時に処理したい内容を記述します。
変数が偶数の場合に値をコンソール表示する、if文を使ったサンプルプログラムです。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
int num = 2; if (num % 2 == 0) { Console.WriteLine(""{0}は偶数です"", num); } num = 7; if (num % 2 == 0) { Console.WriteLine(""{0}は偶数です"", num); } |
実行結果は次のようになります。
2は偶数です
条件式に当たる偶数、奇数の判定は、2で割った余りが0になるか否かで行いました。変数のうち2は偶数のため、条件式にてtrueと判定され、値がコンソール表示されています。一方で、7は奇数のため条件式にてfalseと判定され、コンソール表示がされていません。
偶数をコンソール表示するサンプルプログラムですが、変数が奇数の場合に、奇数であることを表示させたい時を考えてみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
int num = 2; // 偶数表示 if (num % 2 == 0) { Console.WriteLine(""{0}は偶数です"", num); } // 奇数表示 if (num % 2 != 0) { Console.WriteLine(""{0}は奇数です"", num); } |
上記の記述でも実現できますが、いかんせん無駄が多くなってしまいます。
そこでelseを使いましょう。「~の場合、~しなさい。それ以外の場合、~しなさい。」と記述する場合は、if~elseを使うことができます。
1 2 3 4 5 6 7 |
if (条件式) { 処理内容 } else { 処理内容 } |
また、else ifを使用することで、「~の場合、~しなさい。それ以外~の場合、~しなさい。」のように、複数の分岐を記述することができます。
1 2 3 4 5 6 7 8 9 |
if (条件式1) { 処理内容 } else if (条件式2) { 処理内容 } else if (条件式N) { 処理内容 } |
偶数と奇数のコンソール表示プログラムを、if~else、if~else ifを使って表現してみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
int num = 2; // elseで表現 if (num % 2 == 0) { // 偶数表示 Console.WriteLine(""{0}は偶数です"", num); } else { // 奇数表示 Console.WriteLine(""{0}は奇数です"", num); } // else ifで表現 if (num % 2 == 0) { // 偶数表示 Console.WriteLine(""{0}は偶数です"", num); } else if (num % 2 == 1) { // 奇数表示 Console.WriteLine(""{0}は奇数です"", num); } |
if~else、if~else ifを適切に使うことでソースの可読性が上がるため、分岐処理を記述する場合はif~else、if~else ifを使ってみましょう。
論理演算子(and/or/not)の書き方
C#のif文について説明しました。「~の場合、~しなさい。それ以外の場合、~しなさい。」をC#で実現したい場合、if~else、if~else ifで実現できます。
しかし、「~かつ~の場合、~しなさい。~または~の場合、~しなさい。~以外の場合、~しなさい」と表現したい場合もあるでしょう。
冒頭でも紹介しましたが、「かつ」、「または」、「否定(~以外の場合)」を実現したい時に、論理演算子を使います。
C#では次のように論理演算子を記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
// かつ(and)の記述 if (条件式1 && 条件式2) { 処理内容 } // または(or)の記述 if (条件式1 || 条件式2) { 処理内容 } // 否定(not)の記述 if (!条件式1) { 処理内容 } |
「かつ(and)」を実現したい場合は「&&」を、「または(or)」を実現したい場合は「||」を、「否定(not)」を実現したい場合は条件式の前方に「!」を付けます。
次のサンプルプログラムは、二つの変数について偶数、奇数の判断をコンソール表示させるプログラムですが、論理演算子を使ってみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
int num1 = 2; int num2 = 3; // 変数1、変数2がともに偶数の場合(and) if (num1 % 2 == 0 && num2 % 2 == 0) { Console.WriteLine(""{0}と{1}は偶数です"", num1, num2); } // 変数1、変数2のいずれか偶数の場合(or) if (num1 % 2 == 0 || num2 % 2 == 0) { Console.WriteLine(""{0}と{1}のいずれかは偶数です"", num1, num2); } // 変数1、変数2がともに奇数の場合(not) if (!(num1 % 2 == 0 || num2 % 2 == 0)) { Console.WriteLine(""{0}と{1}は奇数です"", num1, num2); } |
実行結果は次のようになります。
2と3のいずれかは偶数です
ともに偶数という判定に「&&」を、いずれか偶数という判定に「||」を使用しました。また、変数1と変数2がともに奇数である判定に、否定演算子「!」を使用しました。「ともに奇数」は「いずれか偶数」の否定であるためです。もちろん「偶数以外 かつ 偶数以外」でも実現できます。
1 2 3 4 5 6 |
// 変数1、変数2がともに奇数の場合 if (!num1 % 2 == 0 && !num2 % 2 == 0) { Console.WriteLine(""{0}と(1)は奇数です"", num1, num2); } |
bool型について、否定演算子を使用することで、
1 2 3 4 5 6 7 8 9 10 11 12 13 |
bool evenFlg = false; // 否定演算子を使わない if (evenFlg == false) { Console.WriteLine(""奇数です""); } // 否定演算子を使う if (!evenFlg) { Console.WriteLine(""奇数です""); } |
すっきりとコーディングできますので、要所で否定演算子を使えるようにしましょう。
if文と論理演算子を組み合わせる
ここまでC#のif文と論理演算子について紹介しましたが、if文と論理演算子を組み合わせることで、プログラムの処理分岐を自在に実現することができます。
以下、二つの変数が奇数と偶数であるかのコンソール表示プログラムを、if文と論理演算子を駆使して記述してみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
int num1 = 2; int num2 = 3; // コンソール表示 if (num1 % 2 == 0 && num2 % 2 == 0) { // 変数1、変数2がともに偶数の場合(and) Console.WriteLine(""{0}と{1}は偶数です"", num1, num2); } else if (!(num1 % 2 == 1 && num2 % 2 == 1)) { // 変数1、変数2がいずれか偶数の場合 // 変数1、変数2がともに奇数の否定で実現(andの否定) // 上の分岐を通るため、変数1、変数2がともに偶数の可能性はない Console.WriteLine(""{0}と{1}のどちらかは偶数です"", num1, num2); } else { // 変数1、変数2がともに奇数の場合 // 「ともに偶数」「いずれか偶数」以外の分岐で実現 Console.WriteLine(""{0}と{1}は奇数です"", num1, num2); } |
実行結果は次のようになります。
2と3のどちらかは偶数です
分岐が増えると処理が複雑になるため、サンプルのように適宜コメントを記述し、誰が見ても処理が理解できるように心がけましょう。
C#でif文、論理演算子(and/or/not)を使って分岐処理を実現しよう!
いかがだったでしょうか。
C#ではif文と論理演算子(and/or/not)を使って分岐処理を実現できます。使う頻度の高い構文になりますので、ぜひマスターし、思い通りのプログラムを作成してみましょう。