Сложная логика Boolean
Часть раздела Логика и управление потоком путешествия по 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 включительно) И пользователь авторизован И система НЕ находится в режиме обслуживания
- Пользователь имеет экстренный доступ
Попробуйте сами
public class DetermineAccess
{
// Реализуйте метод determineAccess
public static bool determineAccess(bool isAdmin, bool isLoggedIn, int timeOfDay, bool isMaintenanceMode, bool hasEmergencyAccess)
{
// Напишите свой код здесь
}
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Многомерные массивы
Основы 2D-массивовОбъявление и инициализация 2D-массивовДоступ к элементам 2D-массиваВложенные циклы с 2D-массивамиЗубчатые массивыОсновные операции с матрицамиПовторение — многомерные массивы4Методы управления потоком выполнения
Досрочный выходЗащитные условияОператоры перехода (goto)Break и ContinueУпрощение вложенных условных конструкций7Логические операторы: продвинутый уровень
Вычисление с коротким замыканиемУсловные логические операторыПриоритет операторовПовторение — продвинутые операторы2Продвинутое принятие решений
Множественные условияСложная логика BooleanСравнение If и SwitchВложенные конструкции SwitchПовторение — продвинутые решения5Обработка исключений
Основы Try-CatchТипы исключенийНесколько блоков CatchРабота с файламиБлок FinallyИспользование Using вместо Try-FinallyПользовательские исключенияПовторение — обработка ошибок3Улучшение циклов
Производительность цикловИтерация по сложным структурамКаждый тип циклаРефакторинг цикловПовторение — оптимизированные циклы6Обработка null
Основы ссылок на nullТипы значений, допускающие nullШаблоны проверки на nullЗащитное программированиеПовторение — безопасность при работе с nullПотренируйтесь самостоятельно: Онлайн-компилятор C#