【C#】if文で安易に複数条件を多用するのは危険(AND,ORの判定方法)

if文で複数条件を用いるデメリット

if文で複数条件を用いると、バグの原因になったり、可読性が低下します

&&」や「||」は、非常に便利ではあるものの、極力使用しないほうが良いでしょう。

今回は、if文で複数条件を回避する方法について解説していきます。

 

ANDの場合

複数条件を使用したif文のサンプルコード(AND)

using System;

namespace c_if_and_or
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = 0;

            int b = 1;

            if (a == 0 && b == 1) // 複数条件を使用
            {
                Console.WriteLine("aは0かつbは1です。");
            }
        }
    }
}

実行結果:

aは0かつbは1です。

上記のようなif文の複数条件は以下のように記述することができます。

複数条件を使用しないサンプルコード(AND)

using System;

namespace c_if_and_or
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = 0;

            int b = 1;

            if (a == 0) // 階層を分けることで複数条件を書かなくて済む
            {
                if (b == 1)
                {
                    Console.WriteLine("aは0かつbは1です。");
                }
            }
        }
    }
}

実行結果:

aは0かつbは1です。

上記のように、階層を分けることで複数条件を記述することなく、条件分岐をすることができます。

こちらの記述方法のほうが、ネストは深くなってしまうものの、可読性は向上します。

 

ORの場合

複数条件を使用したif文のサンプルコード(OR)

using System;

namespace c_if_and_or
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = 0;

            int b = 1;

            if (a == 0 || b == 1) // 複数条件を使用
            {
                Console.WriteLine("aが0もしくはbが1です。");
            }
        }
    }
}

実行結果:

aが0もしくはbが1です。

ORの場合には、先程の階層を分ける方法を使うことはできません。

そのためORの場合には、メソッド化することを検討しましょう

複数条件を使用しないサンプルコード(メソッド化)

using System;

namespace c_if_and_or
{
    class Program
    {
        static bool IsJudge(int a, int b) // メソッド化
        {
            if (a == 0)
            {
                return true;
            }

            if (b == 1)
            {
                return true;
            }

            return false;
        }

        static void Main(string[] args)
        {

            if (IsJudge(3, 1))
            {
                Console.WriteLine("aが0もしくはbが1です。");
            }
            else
            {
                Console.WriteLine("aが0ではないかつ、bが1でもない。");
            }
        }
    }
}

実行結果:

aが0もしくはbが1です。

上記のように、複数条件がある場合にはメソッド化を検討してみると良いです。

メソッド化することで、バグを防いだり、可読性を向上させることにつながります

 

おすすめ書籍・Udemy

■C#を学習し始めた方向け
やさしいC 第3版 (「やさしい」シリーズ)

1週間でCの基礎が学べる本

確かな力が身につくC「超」入門 第2版 (Informatics&IDEA)

■C#をある程度学習した方向け
基礎からしっかり学ぶCの教科書 改訂新版 (マイクロソフト関連書)

独習C 新版

Effective C 6.0/7.0

 

■Udemyのおすすめ講座①
C#初心者が最初に身に着けるべき30の文法

■Udemyのおすすめ講座②
初心者でも最速でシゴトに使えるC#!