C# 論理演算子(ifの入れ子)

論理演算子(ifの入れ子)

論理演算子

論理演算子は、複数の条件式を論理的に結合し、その結果をtrue/falseで返します。

比較演算子を組み合わせて利用するのが一般的です。

(以下の表では、xはtrue、yはfalseとする)

演算子概要用例
&&論理積。左右の式がともにtrueの場合にtruex && yfalse
||論理和。左右の式のいずれかがtrueの場合にtruex || ytrue
^排他的論理和。左右の式のどちらか一方だけがtrueの場合にtruex || ytrue
!否定。式がtrueの場合はfalsefalseの場合はtrue!xfalse

論理演算子の結果は、左右の式の真偽値によって決まります。

それぞれの演算子をベン図で表現すると以下のようになります。

論理積(&&)
論理和(||)
排他的論理和(^)

画像:ウィキペディア ベン図

比較演算子では常に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など)が入れ子構造になっている場合はインデントを正しくしてください。インデントが乱れているとコードが読みにくくなります。

課題

レベルアップ問題集 > 条件分岐メニュー > AND

参考

「独習C#」3.4 論理演算子

「独習C#」4.1.3 if命令 – 入れ子構造