複雑な論理演算
CoddyのC#ジャーニー「ロジックとフロー」セクションの一部。レッスン 9/66。
複数の条件を組み合わせると、ブール論理は複雑になることがあります。演算子の優先順位を理解し、括弧を使うことで、明確で正しい式を書きやすくなります。
C#におけるブール演算子の優先順位は次のとおりです。
- 否定 (!)
- 論理積 (&&)
- 論理和 (||)
複雑なブール式の例を見てみましょう。
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);チャレンジ
中級次のルールに基づいて、ユーザーがシステムにアクセスできるかどうかを判定する、determineAccessというメソッドを作成してください。
- 5つのパラメーターを受け取ります。
- isAdmin (bool):ユーザーが管理者かどうか
- isLoggedIn (bool):ユーザーが現在ログインしているかどうか
- timeOfDay (int):現在の時刻(0-23)
- isMaintenanceMode (bool):システムがメンテナンスモードかどうか
- hasEmergencyAccess (bool):ユーザーが緊急アクセス権を持っているかどうか
- 次の条件のいずれかが真の場合にtrueを返します。
- ユーザーが管理者で、かつログインしている
- 時刻が営業時間内(9-17を含む)で、かつユーザーがログインしており、かつシステムがメンテナンスモードではない
- ユーザーが緊急アクセス権を持っている
自分で試してみよう
public class DetermineAccess
{
// determineAccess メソッドを実装してください
public static bool determineAccess(bool isAdmin, bool isLoggedIn, int timeOfDay, bool isMaintenanceMode, bool hasEmergencyAccess)
{
// ここにコードを書いてください
}
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
ロジックとフローのすべてのレッスン
自分で練習してみよう: C#オンラインコンパイラ