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# é:
- NÃO (!)
- E (&&)
- 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);Desafio
MédioCrie um método chamado determineAccess que determina se um usuário tem acesso a um sistema com base nessas regras:
- 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
- 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):
- NÃO (!)
- E (&&)
- 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
}
}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
1Multi-dimensional Arrays
2D Arrays BasicsDeclaring and Initializing 2DAccessing 2D Array ElementsNested Loops with 2D ArraysJagged ArraysCommon Matrix OperationsRecap - Multi-dimensional4Flow Control Techniques
Early ReturnsGuard ClausesJump Statements (goto)Break and ContinueFlatten Nested Conditionals7Logical Operators Advanced
Short-Circuit EvaluationConditional Logical OperatorsOperator PrecedenceRecap - Advanced Operators2Advanced Decision Making
Multiple ConditionsComplex Boolean LogicIf vs. Switch ComparisonNested Switch StatementsRecap - Advanced Decisions5Exception Handling
Try-Catch BasicsException TypesMultiple Catch BlocksWorking with FilesFinally BlockUsing vs. Try-FinallyCustom ExceptionsRecap - Error Handling3Loop Enhancements
Loop PerformanceIterating ComplexEach Loop TypeRefactoring LoopsRecap - Optimized Loops6Null Handling
Null Reference BasicsNullable Value TypesNull Checking PatternsDefensive ProgrammingRecap - Null Safety