Complex Boolean Logic
Часть раздела Логика и управление потоком путешествия по C# на Coddy — урок 9 из 66.
Булева логика может становиться сложной при объединении нескольких условий. Понимание приоритета операторов и использование скобок помогает писать ясные и правильные выражения.
Порядок приоритета логических операторов в C# следующий:
- НЕ (!)
- И (&&)
- ИЛИ (||)
Вот пример сложного булевого выражения:
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, который определяет, имеет ли пользователь доступ к системе на основе следующих правил:
- Принимает пять параметров:
- isAdmin (bool): Является ли пользователь администратором
- isLoggedIn (bool): Авторизован ли пользователь в данный момент
- timeOfDay (int): Текущее время в часах (0-23)
- isMaintenanceMode (bool): Находится ли система в режиме обслуживания
- hasEmergencyAccess (bool): Имеет ли пользователь экстренный доступ
- Возвращает true, когда ЛЮБОЕ из этих условий истинно:
- Пользователь является администратором И авторизован
- Время находится между рабочими часами (9-17 включительно) И пользователь авторизован И система НЕ находится в режиме обслуживания
- Пользователь имеет экстренный доступ
Шпаргалка
Приоритет булевых операторов в C# (от высшего к низшему):
- НЕ (!)
- И (&&)
- ИЛИ (||)
Сложные булевы выражения:
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");
}
}Короткозамкнутая оценка предотвращает ошибки, оценивая только необходимое:
// 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);Попробуйте сами
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