Menu
Coddy logo textTech

Complex Boolean Logic

Parte da seção Lógica & Fluxo do Journey de C# da Coddy — lição 9 de 66.

A lógica booleana pode se tornar complexa ao combinar múltiplas condições. Compreender a precedência de operadores e usar parênteses ajuda a escrever expressões claras e corretas.

A ordem de precedência para operadores booleanos em C# é:

  1. NÃO (!)
  2. E (&&)
  3. OU (||)

Aqui está um exemplo de uma expressão booleana complexa:

bool isValid = age >= 18 && (score > 70 || hasPriorExperience) && !isBlacklisted;

Use as Leis de De Morgan para simplificar negações complexas:

// Instead of:
if (!(age >= 18 && score > 70))
{
    // This is equivalent to:
    if (age < 18 || score <= 70)
    {
        Console.WriteLine("Not eligible");
    }
}

Avaliação de curto-circuito: Com && e ||, o C# avalia apenas o necessário:

// Se user for null, o C# não avaliará a segunda condição
if (user != null && user.IsActive)
{
    Console.WriteLine("Active user");
}

Use parênteses explícitos para maior clareza, mesmo quando não forem estritamente necessários:

bool result = (isWeekend || isHoliday) && (hour > 10 && hour < 20);
challenge icon

Desafio

Médio

Crie um método chamado determineAccess que determina se um usuário tem acesso a um sistema com base nessas regras:

  1. Aceita cinco parâmetros:
    • isAdmin (bool): Se o usuário é um administrador
    • isLoggedIn (bool): Se o usuário está atualmente logado
    • timeOfDay (int): A hora atual (0-23)
    • isMaintenanceMode (bool): Se o sistema está em modo de manutenção
    • hasEmergencyAccess (bool): Se o usuário tem acesso de emergência
  2. Retorna true quando QUALQUER uma dessas condições for verdadeira:
    • O usuário é admin E está logado
    • O horário está entre o horário comercial (9-17 inclusive) E o usuário está logado E o sistema NÃO está em modo de manutenção
    • O usuário tem acesso de emergência

Folha de consulta

Precedência de operadores booleanos em C# (do maior para o menor):

  1. NÃO (!)
  2. E (&&)
  3. OU (||)

Expressões booleanas complexas:

bool isValid = age >= 18 && (score > 70 || hasPriorExperience) && !isBlacklisted;

Leis de De Morgan para simplificar negações:

// Em vez de:
if (!(age >= 18 && score > 70))
{
    // Isso é equivalente a:
    if (age < 18 || score <= 70)
    {
        Console.WriteLine("Not eligible");
    }
}

Avaliação de curto-circuito previne erros ao avaliar apenas o necessário:

// Se user for null, C# não avaliará a segunda condição
if (user != null && user.IsActive)
{
    Console.WriteLine("Active user");
}

Use parênteses explícitos para clareza:

bool result = (isWeekend || isHoliday) && (hour > 10 && hour < 20);

Experimente você mesmo

public class DetermineAccess
{
    // Implemente o método determineAccess
    public static bool determineAccess(bool isAdmin, bool isLoggedIn, int timeOfDay, bool isMaintenanceMode, bool hasEmergencyAccess)
    {
        // Escreva seu código aqui
        
    }
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Lógica & Fluxo