Menu
Coddy logo textTech

Complex Boolean Logic

Часть раздела Логика и управление потоком путешествия по C# на Coddy — урок 9 из 66.

Булева логика может становиться сложной при объединении нескольких условий. Понимание приоритета операторов и использование скобок помогает писать ясные и правильные выражения.

Порядок приоритета логических операторов в C# следующий:

  1. НЕ (!)
  2. И (&&)
  3. ИЛИ (||)

Вот пример сложного булевого выражения:

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);
challenge icon

Задание

Средне

Создайте метод с именем determineAccess, который определяет, имеет ли пользователь доступ к системе на основе следующих правил:

  1. Принимает пять параметров:
    • isAdmin (bool): Является ли пользователь администратором
    • isLoggedIn (bool): Авторизован ли пользователь в данный момент
    • timeOfDay (int): Текущее время в часах (0-23)
    • isMaintenanceMode (bool): Находится ли система в режиме обслуживания
    • hasEmergencyAccess (bool): Имеет ли пользователь экстренный доступ
  2. Возвращает true, когда ЛЮБОЕ из этих условий истинно:
    • Пользователь является администратором И авторизован
    • Время находится между рабочими часами (9-17 включительно) И пользователь авторизован И система НЕ находится в режиме обслуживания
    • Пользователь имеет экстренный доступ

Шпаргалка

Приоритет булевых операторов в C# (от высшего к низшему):

  1. НЕ (!)
  2. И (&&)
  3. ИЛИ (||)

Сложные булевы выражения:

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)
    {
        // Напишите свой код здесь
        
    }
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и управление потоком