Complex Boolean Logic
Parte de la sección Lógica y Flujo del Journey de C# de Coddy — lección 9 de 66.
La lógica booleana puede volverse compleja al combinar múltiples condiciones. Comprender la precedencia de operadores y usar paréntesis ayuda a escribir expresiones claras y correctas.
El orden de precedencia para los operadores booleanos en C# es:
- NO (!)
- Y (&&)
- O (||)
Aquí hay un ejemplo de una expresión booleana compleja:
bool isValid = age >= 18 && (score > 70 || hasPriorExperience) && !isBlacklisted;Utiliza las Leyes de De Morgan para simplificar negaciones complejas:
// En lugar de:
if (!(age >= 18 && score > 70))
{
// Esto es equivalente a:
if (age < 18 || score <= 70)
{
Console.WriteLine("Not eligible");
}
}Evaluación de cortocircuito: Con && y ||, C# evalúa solo lo necesario:
// Si user es null, C# no evaluará la segunda condición
if (user != null && user.IsActive)
{
Console.WriteLine("Active user");
}Usa paréntesis explícitos para mayor claridad, incluso cuando no sean estrictamente necesarios:
bool result = (isWeekend || isHoliday) && (hour > 10 && hour < 20);Desafío
IntermedioCrea un método llamado determineAccess que determina si un usuario tiene acceso a un sistema basado en estas reglas:
- Toma cinco parámetros:
- isAdmin (bool): Si el usuario es un administrador
- isLoggedIn (bool): Si el usuario ha iniciado sesión actualmente
- timeOfDay (int): La hora actual (0-23)
- isMaintenanceMode (bool): Si el sistema está en modo de mantenimiento
- hasEmergencyAccess (bool): Si el usuario tiene acceso de emergencia
- Devuelve true cuando CUALQUIERA de estas condiciones sea verdadera:
- El usuario es un administrador Y ha iniciado sesión
- La hora está entre las horas laborales (9-17 inclusive) Y el usuario ha iniciado sesión Y el sistema NO está en modo de mantenimiento
- El usuario tiene acceso de emergencia
Hoja de referencia
Precedencia de operadores booleanos en C# (de mayor a menor):
- NO (!)
- Y (&&)
- O (||)
Expresiones booleanas complejas:
bool isValid = age >= 18 && (score > 70 || hasPriorExperience) && !isBlacklisted;Leyes de De Morgan para simplificar negaciones:
// Instead of:
if (!(age >= 18 && score > 70))
{
// This is equivalent to:
if (age < 18 || score <= 70)
{
Console.WriteLine("Not eligible");
}
}La evaluación de cortocircuito previene errores evaluando solo lo necesario:
// If user is null, C# won't evaluate the second condition
if (user != null && user.IsActive)
{
Console.WriteLine("Active user");
}Usa paréntesis explícitos para mayor claridad:
bool result = (isWeekend || isHoliday) && (hour > 10 && hour < 20);Pruébalo tú mismo
public class DetermineAccess
{
// Implementa el método determineAccess
public static bool determineAccess(bool isAdmin, bool isLoggedIn, int timeOfDay, bool isMaintenanceMode, bool hasEmergencyAccess)
{
// Escribe tu código aquí
}
}Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Lógica y Flujo
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