Menu
Coddy logo textTech

Complex Boolean Logic

CoddyのC#ジャーニー「ロジックとフロー」セクションの一部 — レッスン 9/66。

複数の条件を組み合わせると、ブール論理は複雑になることがあります。演算子の優先順位を理解し、括弧を使用することで、明確で正しい式を書くのに役立ちます。

C# のブール演算子の優先順位は:

  1. NOT (!)
  2. AND (&&)
  3. OR (||)

複雑なブール式の例を以下に示します:

bool isValid = age >= 18 && (score > 70 || hasPriorExperience) && !isBlacklisted;

ド・モルガンの法則を使用して複雑な否定を簡略化します:

// Instead of:
if (!(age >= 18 && score > 70))
{
    // This is equivalent to:
    if (age < 18 || score <= 70)
    {
        Console.WriteLine("Not eligible");
    }
}

短絡評価: && と || を使用すると、C# は必要なものだけを評価します:

// If user is null, C# won't evaluate the second condition
if (user != null && user.IsActive)
{
    Console.WriteLine("Active user");
}

明確さのために、厳密には必要でない場合でも明示的な括弧を使用してください:

bool result = (isWeekend || isHoliday) && (hour > 10 && hour < 20);
challenge icon

チャレンジ

中級

determineAccess という名前のメソッドを作成してください。このメソッドは、以下のルールに基づいてユーザーがシステムにアクセスできるかどうかを判定します:

  1. 5つのパラメータを受け取ります:
    • isAdmin (bool): ユーザーが管理者かどうか
    • isLoggedIn (bool): ユーザーが現在ログインしているかどうか
    • timeOfDay (int): 現在の時刻(0-23)
    • isMaintenanceMode (bool): システムがメンテナンスモードかどうか
    • hasEmergencyAccess (bool): ユーザーが緊急アクセスを持つかどうか
  2. 以下のいずれかの条件が真の場合に true を返します:
    • ユーザーが管理者であるかつログインしている
    • 時刻が業務時間内(9-17を含む)かつユーザーがログインしていてかつシステムがメンテナンスモードでない
    • ユーザーが緊急アクセスを持つ

チートシート

C# でのブール演算子の優先順位(高い順から低い順):

  1. NOT (!)
  2. AND (&&)
  3. OR (||)

複雑なブール式:

bool isValid = age >= 18 && (score > 70 || hasPriorExperience) && !isBlacklisted;

否定の簡略化のためのド・モルガンの法則:

// の代わりに:
if (!(age >= 18 && score > 70))
{
    // これは同等です:
    if (age < 18 || score <= 70)
    {
        Console.WriteLine("Not eligible");
    }
}

短絡評価により、必要なものだけを評価することでエラーを防ぎます:

// user が null の場合、C# は 2 番目の条件を評価しません
if (user != null && user.IsActive)
{
    Console.WriteLine("Active user");
}

明瞭さのために明示的な括弧を使用してください:

bool result = (isWeekend || isHoliday) && (hour > 10 && hour < 20);

自分で試してみよう

public class DetermineAccess
{
    // determineAccess メソッドを実装してください
    public static bool determineAccess(bool isAdmin, bool isLoggedIn, int timeOfDay, bool isMaintenanceMode, bool hasEmergencyAccess)
    {
        // ここにコードを書いてください
        
    }
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

ロジックとフローのすべてのレッスン