Menu
CoddyTech

Lógica Booleana Complexa

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

A lógica booleana pode ficar complexa ao combinar várias condições. Entender a precedência dos operadores e usar parênteses ajuda a escrever expressões claras e corretas.

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

  1. NOT (!)
  2. AND (&&)
  3. OR (||)

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:

  • !(A && B) equivale a !A || !B
  • !(A || B) equivale a !A && !B

Negar uma comparação inverte-a: >= se torna < e > se torna <=. Estas duas condições são equivalentes:

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

// escreva o equivalente:
if (age < 18 || score <= 70)
{
    Console.WriteLine("Not eligible");
}

Avaliação de curto-circuito: com && e ||, C# avalia apenas o que é 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 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 nestas regras:

  1. Recebe cinco parâmetros:
    • isAdmin (bool): Se o usuário é administrador
    • isLoggedIn (bool): Se o usuário está conectado no momento
    • 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 ANY destas condições é verdadeira:
    • O usuário é administrador E está conectado
    • O horário está dentro do horário comercial (9-17, inclusive) E o usuário está conectado E o sistema NÃO está em modo de manutenção
    • O usuário tem acesso de emergência

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

Pratique por conta própria: Compilador de C# online