Lógica booleana compleja
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 determine si un usuario tiene acceso a un sistema según estas reglas:
- Acepta cinco parámetros:
- isAdmin (bool): Indica si el usuario es administrador
- isLoggedIn (bool): Indica si el usuario ha iniciado sesión actualmente
- timeOfDay (int): La hora actual (0-23)
- isMaintenanceMode (bool): Indica si el sistema está en modo de mantenimiento
- hasEmergencyAccess (bool): Indica si el usuario tiene acceso de emergencia
- Devuelve true cuando ANY de estas condiciones sea verdadera:
- El usuario es administrador AND ha iniciado sesión
- La hora está dentro del horario laboral (de 9 a 17 inclusive) AND el usuario ha iniciado sesión AND el sistema NO está en modo de mantenimiento
- El usuario tiene acceso de emergencia
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
1Arrays multidimensionales
Conceptos básicos de arrays 2DDeclaración e inicialización de arrays 2DAcceso a elementos de arrays 2DBucles anidados con arrays 2DArrays irregularesOperaciones comunes con matricesRepaso: arrays multidimensionales4Técnicas de control de flujo
Retornos anticipadosCláusulas de guardaSentencias de salto (goto)Break y ContinueAplanar condicionales anidados7Operadores lógicos avanzados
Evaluación de cortocircuitoOperadores lógicos condicionalesPrecedencia de operadoresRepaso: operadores avanzados2Toma de decisiones avanzada
Múltiples condicionesLógica booleana complejaComparación entre If y SwitchSentencias Switch anidadasRepaso: decisiones avanzadas5Manejo de excepciones
Fundamentos de Try-CatchTipos de excepcionesMúltiples bloques CatchTrabajo con archivosBloque FinallyUso de Using frente a Try-FinallyExcepciones personalizadasRepaso: manejo de errores3Mejoras de bucles
Rendimiento de buclesIteración de estructuras complejasCada tipo de bucleRefactorización de buclesRepaso: bucles optimizados6Manejo de valores nulos
Conceptos básicos de referencias nulasTipos de valor anulablesPatrones de comprobación de valores nulosProgramación defensivaRepaso: seguridad frente a valores nulosPractica por tu cuenta: Compilador de C# online