Complex Boolean Logic
CoddyのC#ジャーニー「ロジックとフロー」セクションの一部 — レッスン 9/66。
複数の条件を組み合わせると、ブール論理は複雑になることがあります。演算子の優先順位を理解し、括弧を使用することで、明確で正しい式を書くのに役立ちます。
C# のブール演算子の優先順位は:
- NOT (!)
- AND (&&)
- 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);チャレンジ
中級determineAccess という名前のメソッドを作成してください。このメソッドは、以下のルールに基づいてユーザーがシステムにアクセスできるかどうかを判定します:
- 5つのパラメータを受け取ります:
- isAdmin (bool): ユーザーが管理者かどうか
- isLoggedIn (bool): ユーザーが現在ログインしているかどうか
- timeOfDay (int): 現在の時刻(0-23)
- isMaintenanceMode (bool): システムがメンテナンスモードかどうか
- hasEmergencyAccess (bool): ユーザーが緊急アクセスを持つかどうか
- 以下のいずれかの条件が真の場合に true を返します:
- ユーザーが管理者であるかつログインしている
- 時刻が業務時間内(9-17を含む)かつユーザーがログインしていてかつシステムがメンテナンスモードでない
- ユーザーが緊急アクセスを持つ
チートシート
C# でのブール演算子の優先順位(高い順から低い順):
- NOT (!)
- AND (&&)
- 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)
{
// ここにコードを書いてください
}
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
ロジックとフローのすべてのレッスン
1Multi-dimensional Arrays
2D Arrays BasicsDeclaring and Initializing 2DAccessing 2D Array ElementsNested Loops with 2D ArraysJagged ArraysCommon Matrix OperationsRecap - Multi-dimensional4Flow Control Techniques
Early ReturnsGuard ClausesJump Statements (goto)Break and ContinueFlatten Nested Conditionals7Logical Operators Advanced
Short-Circuit EvaluationConditional Logical OperatorsOperator PrecedenceRecap - Advanced Operators2Advanced Decision Making
Multiple ConditionsComplex Boolean LogicIf vs. Switch ComparisonNested Switch StatementsRecap - Advanced Decisions5Exception Handling
Try-Catch BasicsException TypesMultiple Catch BlocksWorking with FilesFinally BlockUsing vs. Try-FinallyCustom ExceptionsRecap - Error Handling3Loop Enhancements
Loop PerformanceIterating ComplexEach Loop TypeRefactoring LoopsRecap - Optimized Loops6Null Handling
Null Reference BasicsNullable Value TypesNull Checking PatternsDefensive ProgrammingRecap - Null Safety