論理演算子(ifの入れ子)
論理演算子
論理演算子は、複数の条件式を論理的に結合し、その結果をtrue/falseで返します。
比較演算子を組み合わせて利用するのが一般的です。
(以下の表では、xはtrue、yはfalseとする)
| 演算子 | 概要 | 用例 |
| && | 論理積。左右の式がともにtrueの場合にtrue | x && y → false |
| || | 論理和。左右の式のいずれかがtrueの場合にtrue | x || y → true |
| ^ | 排他的論理和。左右の式のどちらか一方だけがtrueの場合にtrue | x || y → true |
| ! | 否定。式がtrueの場合はfalse、falseの場合はtrue | !x → false |
論理演算子の結果は、左右の式の真偽値によって決まります。
それぞれの演算子をベン図で表現すると以下のようになります。



画像:ウィキペディア ベン図
比較演算子では常に2つの値の比較しかできないので、3つ以上の値を比較したい場合は論理演算子が必要になる
int n = 10;
Console.WriteLine(n > 1 && n < 10); // 1 < n < 10のような比較はできない
ifの入れ子構造
ifを入れ子構造(ネスト)にすることによって、論理演算子と同様のことができます。
int a = 5;
int b = 10;
if (a >= 10)
{
if (b >= 10)
{
Console.WriteLine("aとbは10以上");
}
else
{
Console.WriteLine("どちらかが10以上");
}
else if (b >= 10)
{
Console.WriteLine("どちらかが10以上");
}
論理演算子を使用すると以下のように記述できます。
int a = 5;
int b = 10;
if (a >= 10 && b >= 10)
{
Console.WriteLine("aとbは10以上");
}
else if (a >= 10 || b >= 10)
{
Console.WriteLine("どちらかが10以上");
}
論理演算子を使用するか、ifを入れ子構造にするかは、場合に応じて都合の良い方を使います。
入れ子構造を使用する場合は、ネスト(インデントの深さ)に注意しましょう。ネストが深くなるにつれてコードが読みにくくなるため、深いネストは避けるべきです。
制御構文(ifやforなど)が入れ子構造になっている場合はインデントを正しくしてください。インデントが乱れているとコードが読みにくくなります。
課題
参考
「独習C#」3.4 論理演算子
「独習C#」4.1.3 if命令 – 入れ子構造