Menu
CoddyTech

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 varias condiciones. Comprender la precedencia de los operadores y usar paréntesis ayuda a escribir expresiones claras y correctas.

El orden de precedencia de los operadores booleanos en C# es:

  1. NOT (!)
  2. AND (&&)
  3. OR (||)

Aquí tienes un ejemplo de una expresión booleana compleja:

bool isValid = age >= 18 && (score > 70 || hasPriorExperience) && !isBlacklisted;

Usa las leyes de De Morgan para simplificar negaciones complejas:

  • !(A && B) equivale a !A || !B
  • !(A || B) equivale a !A && !B

Al negar una comparación, esta se invierte: >= se convierte en < y > se convierte en <=. Estas dos condiciones son equivalentes:

// En lugar de:
if (!(age >= 18 && score > 70))
{
    Console.WriteLine("Not eligible");
}

// escribe el equivalente:
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 determine si un usuario tiene acceso a un sistema según estas reglas:

  1. Acepta cinco parámetros:
    • isAdmin (bool): Indica si el usuario es administrador
    • isLoggedIn (bool): Indica si el usuario ha iniciado sesión
    • 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
  2. Devuelve true cuando CUALQUIERA de estas condiciones sea verdadera:
    • El usuario es administrador Y ha iniciado sesión
    • La hora está dentro del horario laboral (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

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

Practica por tu cuenta: Compilador de C# online