[C#] if文で複数条件を扱う方法

C#でif文を使用して複数の条件を扱うには、論理演算子を用います。

主に使用される論理演算子には、&&(AND)、||(OR)、および!(NOT)があります。

&&はすべての条件が真の場合に真を返し、||は少なくとも一つの条件が真であれば真を返します。

!は条件の真偽を反転させます。

例えば、if (a > 0 && b < 10)は、aが0より大きく、かつbが10未満である場合に真となります。

条件を組み合わせることで、複雑な条件判定が可能です。

この記事でわかること
  • AND、OR、NOT演算子を用いた複数条件の基本的な使い方
  • 複数条件を組み合わせた条件式の作成方法とその評価順序
  • カッコを使った優先順位の変更と短絡評価の仕組み
  • ユーザー認証やデータフィルタリング、ゲームロジックにおける応用例
  • 複雑な条件式を整理するための実践的な方法

目次から探す

複数条件を扱う論理演算子

C#では、条件分岐を行う際に複数の条件を組み合わせて評価することができます。

これを実現するために、論理演算子を使用します。

ここでは、AND演算子、OR演算子、NOT演算子の使い方について詳しく説明します。

AND演算子(&&)の使い方

AND演算子&&は、複数の条件がすべて真である場合にのみ、全体の条件を真と評価します。

以下にサンプルコードを示します。

using System;
class Program
{
    static void Main()
    {
        int age = 25;
        bool hasLicense = true;
        // 年齢が18以上で、かつ運転免許を持っている場合
        if (age >= 18 && hasLicense)
        {
            Console.WriteLine("運転が可能です。");
        }
        else
        {
            Console.WriteLine("運転はできません。");
        }
    }
}
運転が可能です。

この例では、ageが18以上であり、かつhasLicensetrueである場合に「運転が可能です。」と表示されます。

どちらか一方でも条件を満たさない場合は「運転はできません。」と表示されます。

OR演算子(||)の使い方

OR演算子||は、複数の条件のうち少なくとも一つが真である場合に、全体の条件を真と評価します。

以下にサンプルコードを示します。

using System;
class Program
{
    static void Main()
    {
        bool isWeekend = true;
        bool isHoliday = false;
        // 週末または祝日の場合
        if (isWeekend || isHoliday)
        {
            Console.WriteLine("今日は休みです。");
        }
        else
        {
            Console.WriteLine("今日は仕事です。");
        }
    }
}
今日は休みです。

この例では、isWeekendtrueであるため、「今日は休みです。」と表示されます。

isHolidaytrueであっても同様に「今日は休みです。」と表示されます。

NOT演算子(!)の使い方

NOT演算子!は、条件の真偽を反転させます。

つまり、条件が真であれば偽に、偽であれば真にします。

以下にサンプルコードを示します。

using System;
class Program
{
    static void Main()
    {
        bool isRaining = false;
        // 雨が降っていない場合
        if (!isRaining)
        {
            Console.WriteLine("傘は必要ありません。");
        }
        else
        {
            Console.WriteLine("傘を持って行きましょう。");
        }
    }
}
傘は必要ありません。

この例では、isRainingfalseであるため、!isRainingtrueとなり、「傘は必要ありません。」と表示されます。

isRainingtrueであれば、「傘を持って行きましょう。」と表示されます。

複数条件の組み合わせ

C#では、複数の条件を組み合わせてより複雑な条件式を作成することができます。

ここでは、AND演算子とOR演算子の組み合わせ、条件のネスト、複雑な条件式の整理方法について説明します。

ANDとORの組み合わせ

AND演算子&&とOR演算子||を組み合わせることで、複雑な条件を表現することができます。

以下にサンプルコードを示します。

using System;
class Program
{
    static void Main()
    {
        int age = 20;
        bool hasLicense = true;
        bool isStudent = false;
        // 年齢が18以上で、かつ運転免許を持っている、または学生である場合
        if ((age >= 18 && hasLicense) || isStudent)
        {
            Console.WriteLine("特別な割引が適用されます。");
        }
        else
        {
            Console.WriteLine("割引は適用されません。");
        }
    }
}
特別な割引が適用されます。

この例では、ageが18以上でhasLicensetrueであるため、条件式全体が真となり、「特別な割引が適用されます。」と表示されます。

isStudenttrueであれば、他の条件が偽でも割引が適用されます。

複数条件のネスト

条件をネストすることで、より詳細な条件分岐を行うことができます。

以下にサンプルコードを示します。

using System;
class Program
{
    static void Main()
    {
        int score = 85;
        bool hasExtraCredit = true;
        // スコアが80以上の場合
        if (score >= 80)
        {
            // 追加クレジットがある場合
            if (hasExtraCredit)
            {
                Console.WriteLine("成績はAです。");
            }
            else
            {
                Console.WriteLine("成績はBです。");
            }
        }
        else
        {
            Console.WriteLine("成績はCです。");
        }
    }
}
成績はAです。

この例では、scoreが80以上であり、hasExtraCredittrueであるため、「成績はAです。」と表示されます。

条件がネストされているため、スコアが80以上でない場合は「成績はCです。」と表示されます。

複雑な条件式の整理方法

複雑な条件式を整理するためには、以下の方法を考慮することが重要です。

  • カッコを使用する: カッコを使って条件の優先順位を明確にすることで、意図しない評価を防ぎます。
  • 変数に分ける: 複雑な条件を一度に書くのではなく、部分的な条件を変数に分けて可読性を向上させます。
  • コメントを追加する: 条件の意図を明確にするために、適切なコメントを追加します。

以下に、これらの方法を用いたサンプルコードを示します。

using System;
class Program
{
    static void Main()
    {
        int age = 30;
        bool hasLicense = true;
        bool isEmployed = false;
        // 年齢が18以上で運転免許を持っているか、雇用されている場合
        bool isEligibleForDiscount = (age >= 18 && hasLicense) || isEmployed;
        if (isEligibleForDiscount)
        {
            Console.WriteLine("割引が適用されます。");
        }
        else
        {
            Console.WriteLine("割引は適用されません。");
        }
    }
}
割引が適用されます。

この例では、isEligibleForDiscountという変数を使用して条件を整理し、可読性を向上させています。

条件の意図を明確にするために、コメントも追加されています。

条件式の評価順序

C#における条件式の評価順序は、プログラムの動作を正しく理解するために重要です。

ここでは、演算子の優先順位、カッコを使った優先順位の変更、短絡評価の仕組みについて説明します。

演算子の優先順位

C#では、演算子にはそれぞれ優先順位があり、優先順位が高い演算子が先に評価されます。

以下は、一般的な演算子の優先順位を示した表です。

スクロールできます
優先順位演算子説明
!論理否定
*, /, %乗算、除算、剰余
+, -加算、減算
<, >, <=, >=比較演算子
==, !=等価演算子
&&論理積(AND)
||論理和(OR)

この優先順位に従って、条件式が評価されます。

例えば、a + b * cb * cが先に計算され、その後にaが加算されます。

カッコを使った優先順位の変更

カッコを使用することで、演算子の優先順位を明示的に変更することができます。

カッコ内の式は、他の演算子よりも優先して評価されます。

以下にサンプルコードを示します。

using System;
class Program
{
    static void Main()
    {
        int a = 5;
        int b = 10;
        int c = 15;
        // カッコを使って優先順位を変更
        int result1 = a + b * c; // 5 + (10 * 15)
        int result2 = (a + b) * c; // (5 + 10) * 15
        Console.WriteLine("result1: " + result1);
        Console.WriteLine("result2: " + result2);
    }
}
result1: 155
result2: 225

この例では、result1b * cが先に計算され、result2a + bが先に計算されます。

カッコを使うことで、計算の順序を明確に指定できます。

短絡評価の仕組み

短絡評価(ショートサーキット評価)とは、論理演算子&&および||を使用した条件式において、左側の条件だけで結果が決まる場合に、右側の条件を評価しない仕組みです。

以下にサンプルコードを示します。

using System;
class Program
{
    static void Main()
    {
        bool isTrue = true;
        bool isFalse = false;
        // 短絡評価の例
        if (isFalse && CheckCondition())
        {
            Console.WriteLine("この行は表示されません。");
        }
        if (isTrue || CheckCondition())
        {
            Console.WriteLine("この行は表示されます。");
        }
    }
    static bool CheckCondition()
    {
        Console.WriteLine("CheckConditionが呼び出されました。");
        return true;
    }
}
この行は表示されます。

この例では、isFalse && CheckCondition()の条件式において、isFalsefalseであるため、CheckCondition()は呼び出されません。

一方、isTrue || CheckCondition()の条件式では、isTruetrueであるため、CheckCondition()は呼び出されずに「この行は表示されます。」と表示されます。

短絡評価により、不要な計算を省略することができます。

応用例

複数条件を使ったif文は、さまざまな場面で応用することができます。

ここでは、ユーザー認証、データフィルタリング、ゲームロジックにおける応用例を紹介します。

複数条件を使ったユーザー認証

ユーザー認証では、ユーザー名とパスワードの両方が正しいかどうかを確認する必要があります。

以下にサンプルコードを示します。

using System;
class Program
{
    static void Main()
    {
        string username = "admin";
        string password = "1234";
        // 入力されたユーザー名とパスワード
        string inputUsername = "admin";
        string inputPassword = "1234";
        // ユーザー名とパスワードが一致するか確認
        if (inputUsername == username && inputPassword == password)
        {
            Console.WriteLine("ログイン成功");
        }
        else
        {
            Console.WriteLine("ログイン失敗");
        }
    }
}
ログイン成功

この例では、入力されたユーザー名とパスワードが正しい場合に「ログイン成功」と表示されます。

どちらか一方でも間違っている場合は「ログイン失敗」と表示されます。

複数条件を使ったデータフィルタリング

データフィルタリングでは、複数の条件を組み合わせてデータを選別することができます。

以下にサンプルコードを示します。

using System;
using System.Collections.Generic;
class Program
{
    static void Main()
    {
        List<int> numbers = new List<int> { 5, 10, 15, 20, 25, 30 };
        // 10以上かつ20以下の数値をフィルタリング
        foreach (int number in numbers)
        {
            if (number >= 10 && number <= 20)
            {
                Console.WriteLine("フィルタリングされた数値: " + number);
            }
        }
    }
}
フィルタリングされた数値: 10
フィルタリングされた数値: 15
フィルタリングされた数値: 20

この例では、リスト内の数値のうち、10以上かつ20以下の数値がフィルタリングされて表示されます。

複数条件を使ったゲームロジック

ゲームロジックでは、プレイヤーの状態やゲームの進行状況に応じて複数の条件を評価することが重要です。

以下にサンプルコードを示します。

using System;
class Program
{
    static void Main()
    {
        int playerHealth = 50;
        bool hasShield = true;
        bool isInSafeZone = false;
        // プレイヤーが生存しているかどうかを確認
        if ((playerHealth > 0 && hasShield) || isInSafeZone)
        {
            Console.WriteLine("プレイヤーは生存しています。");
        }
        else
        {
            Console.WriteLine("プレイヤーは敗北しました。");
        }
    }
}
プレイヤーは生存しています。

この例では、プレイヤーの体力が0より大きく、シールドを持っているか、安全地帯にいる場合に「プレイヤーは生存しています。」と表示されます。

どちらの条件も満たさない場合は「プレイヤーは敗北しました。」と表示されます。

複数条件を使うことで、ゲームの複雑なロジックを実現できます。

よくある質問

複数条件が多すぎるときの対処法は?

複数条件が多すぎる場合、コードの可読性が低下し、メンテナンスが難しくなることがあります。

以下の方法で対処することができます。

  • メソッドに分割する: 複雑な条件をメソッドに分割し、メソッド名で条件の意図を明確にします。

例:bool IsEligibleForDiscount()のようにすることで、条件の意味がわかりやすくなります。

  • 変数に分ける: 条件の一部を変数に代入し、条件式を簡潔にします。

例:bool isAdult = age >= 18;のようにすることで、条件式が読みやすくなります。

  • コメントを追加する: 条件の意図を説明するコメントを追加し、他の開発者が理解しやすくします。

論理演算子の使い方を間違えたときのデバッグ方法は?

論理演算子の使い方を間違えると、意図しない動作を引き起こすことがあります。

デバッグ方法として以下を試してみてください。

  • 条件式を分解する: 複雑な条件式を分解し、各部分が正しく評価されているか確認します。

例:if (condition1 && condition2)if (condition1)if (condition2)に分けてテストします。

  • デバッグ出力を追加する: 条件式の評価結果をコンソールに出力し、どの条件が真または偽になっているか確認します。

例:Console.WriteLine("Condition1: " + condition1);

  • 単体テストを作成する: 条件式を含むメソッドに対して単体テストを作成し、さまざまな入力に対する出力を確認します。

複数条件を使うときのパフォーマンスへの影響は?

複数条件を使うとき、条件の数が増えるとパフォーマンスに影響を与える可能性がありますが、通常のアプリケーションでは大きな問題にはなりません。

ただし、以下の点に注意することで、パフォーマンスを最適化できます。

  • 短絡評価を活用する: 短絡評価を利用して、不要な条件評価を避けることで、パフォーマンスを向上させます。

例:if (condition1 && condition2)では、condition1が偽の場合、condition2は評価されません。

  • 条件の順序を最適化する: より頻繁に偽になる条件を先に評価することで、条件式全体の評価を早期に終了させることができます。
  • キャッシュを利用する: 計算コストの高い条件は、結果をキャッシュして再利用することで、パフォーマンスを向上させます。

例:bool expensiveCondition = CalculateExpensiveCondition();

まとめ

この記事では、C#におけるif文での複数条件の扱い方について、論理演算子の使い方や条件式の評価順序、応用例を通じて詳しく解説しました。

これにより、複雑な条件を効率的に組み合わせて評価する方法を学び、実際のプログラムに応用するための基礎を築くことができたでしょう。

これを機に、実際のプロジェクトで複数条件を活用し、より洗練されたコードを書いてみてはいかがでしょうか。

当サイトはリンクフリーです。出典元を明記していただければ、ご自由に引用していただいて構いません。

関連カテゴリーから探す

  • 条件分岐 (10)
  • 繰り返し文 (10)
  • URLをコピーしました!
目次から探す