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# é:
- NOT (!)
- AND (&&)
- 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);Desafio
MédioCrie um método chamado determineAccess que determina se um usuário tem acesso a um sistema com base nestas regras:
- 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
- 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
}
}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
1Matrizes Multidimensionais
Noções Básicas de Matrizes 2DDeclaração e Inicialização de Matrizes 2DAcesso aos Elementos de Matrizes 2DLoops Aninhados com Matrizes 2DMatrizes IrregularesOperações Comuns com MatrizesRevisão - Multidimensional4Técnicas de Controle de Fluxo
Retornos AntecipadosCláusulas de GuardaInstruções de Salto (goto)Break e ContinueSimplificando Condicionais Aninhadas7Operadores Lógicos Avançados
Avaliação de Curto-CircuitoOperadores Lógicos CondicionaisPrecedência de OperadoresRevisão - Operadores Avançados2Tomada de Decisões Avançada
Múltiplas CondiçõesLógica Booleana ComplexaComparação entre If e SwitchInstruções Switch AninhadasRevisão - Decisões Avançadas5Tratamento de Exceções
Noções básicas de Try-CatchTipos de ExceçãoMúltiplos blocos CatchTrabalhando com ArquivosBloco FinallyUsando Using vs. Try-FinallyExceções PersonalizadasRecapitulação - Tratamento de Erros3Aprimoramentos de Loops
Desempenho de LoopsIteração de Estruturas ComplexasCada Tipo de LoopRefatoração de LoopsRevisão - Loops Otimizados6Tratamento de Nulos
Fundamentos de Referências NulasTipos de Valor AnuláveisPadrões de Verificação de NulosProgramação DefensivaRecapitulação — Segurança contra NulosPratique por conta própria: Compilador de C# online