Menu
Coddy logo textTech

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:

  1. NO (!)
  2. Y (&&)
  3. 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);
challenge icon

Desafío

Intermedio

Crea un método llamado determineAccess que determina si un usuario tiene acceso a un sistema basado en estas reglas:

  1. 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
  2. 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):

  1. NO (!)
  2. Y (&&)
  3. 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í
        
    }
}
quiz iconPonte a prueba

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