Menu
CoddyTech

複雑な論理演算

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

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

C#におけるブール演算子の優先順位は次のとおりです。

  1. 否定 (!)
  2. 論理積 (&&)
  3. 論理和 (||)

複雑なブール式の例を見てみましょう。

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

ド・モルガンの法則を使って、複雑な否定を簡略化しましょう。

  • !(A && B) は !A || !B と同じです
  • !(A || B) は !A && !B と同じです

比較を否定すると、比較演算子が反転します。>= は < に、> は <= になります。次の2つの条件は同じ意味です。

// 代わりに:
if (!(age >= 18 && score > 70))
{
    Console.WriteLine("Not eligible");
}

// 等価な式を書く:
if (age < 18 || score <= 70)
{
    Console.WriteLine("Not eligible");
}

短絡評価:&& と || では、C# は必要な部分だけを評価します:

// user が null の場合、C# は2番目の条件を評価しません
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を含む)で、かつユーザーがログインしており、かつシステムがメンテナンスモードではない
    • ユーザーが緊急アクセス権を持っている

自分で試してみよう

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

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

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

自分で練習してみよう: C#オンラインコンパイラ