54. Lógica aplicada a condiciones en programación

Las condiciones de programación son expresiones lógicas que permiten decidir qué instrucciones ejecutar según el estado de los datos.

54.1 Introducción

La lógica matemática aparece de forma directa en la programación cada vez que escribimos una condición.

Un if, una validación, un filtro o una regla de acceso dependen de expresiones que se evalúan como verdaderas o falsas.

54.2 Condiciones como proposiciones

Una condición puede verse como una proposición: una afirmación que puede ser verdadera o falsa.

edad >= 18

La expresión anterior afirma que una persona tiene al menos 18 años. Según el valor de edad, la proposición será verdadera o falsa.

54.3 Decisiones con if

La estructura if ejecuta un bloque de código solo si la condición es verdadera.

if (edad >= 18) {
  console.log("Puede ingresar");
}

Desde el punto de vista lógico, el programa pregunta si la proposición edad >= 18 es verdadera.

54.4 Condiciones compuestas

Muchas decisiones requieren combinar varias condiciones simples.

if (edad >= 18 && tieneDocumento) {
  console.log("Acceso permitido");
}

Aquí se usa una conjunción: ambas condiciones deben ser verdaderas para ejecutar el bloque.

54.5 Condiciones alternativas

Cuando basta con que una de varias condiciones se cumpla, usamos una disyunción.

if (esAdministrador || esSupervisor) {
  console.log("Puede aprobar la operación");
}

La acción se permite si al menos una de las dos proposiciones es verdadera.

54.6 Negación en condiciones

La negación permite ejecutar una acción cuando una condición no se cumple.

if (!usuarioBloqueado) {
  console.log("Puede iniciar sesión");
}

La condición equivale a decir: "si no es verdad que el usuario está bloqueado".

54.7 Validaciones

Las validaciones son un uso cotidiano de la lógica. Permiten comprobar que los datos cumplen ciertas reglas antes de continuar.

if (email !== "" && password.length >= 8) {
  registrarUsuario();
}

La función se llama solo si el correo no está vacío y la contraseña tiene longitud suficiente.

54.8 Reglas de acceso

Un sistema puede decidir permisos mediante expresiones lógicas.

const puedeEditar = esAutor || esAdministrador;

Esta regla expresa que un usuario puede editar si escribió el contenido o si tiene rol de administrador.

54.9 Guard clauses

Una forma clara de usar condiciones es detectar primero los casos que impiden continuar.

function procesarPago(monto, tarjetaValida) {
  if (monto <= 0) {
    return "Monto inválido";
  }

  if (!tarjetaValida) {
    return "Tarjeta inválida";
  }

  return "Pago procesado";
}

Estas condiciones separan los casos inválidos antes de ejecutar la lógica principal.

54.10 Expresiones equivalentes en código

Las leyes lógicas también ayudan a escribir código más claro.

if (!(edad < 18)) {
  permitirAcceso();
}

La condición puede expresarse de forma equivalente así:

if (edad >= 18) {
  permitirAcceso();
}

Ambas expresiones tienen el mismo resultado lógico, pero la segunda suele ser más directa.

54.11 Aplicación de De Morgan

Las leyes de De Morgan permiten transformar negaciones de condiciones compuestas.

!(a && b)  equivale a  !a || !b
!(a || b)  equivale a  !a && !b

Estas equivalencias son útiles para simplificar validaciones y evitar condiciones difíciles de leer.

54.12 Condiciones anidadas

Las condiciones anidadas pueden expresar reglas complejas, pero si se acumulan demasiado, el código se vuelve difícil de seguir.

if (usuarioActivo) {
  if (tienePermiso) {
    if (!recursoBloqueado) {
      abrirRecurso();
    }
  }
}

La misma regla puede escribirse como una condición compuesta.

if (usuarioActivo && tienePermiso && !recursoBloqueado) {
  abrirRecurso();
}

54.13 Condiciones con nombres claros

Cuando una condición es compleja, conviene guardarla en una variable con nombre significativo.

const puedeAbrirRecurso =
  usuarioActivo && tienePermiso && !recursoBloqueado;

if (puedeAbrirRecurso) {
  abrirRecurso();
}

El nombre de la variable comunica la intención lógica de la condición.

54.14 Pruebas de condiciones

Una condición importante debe probarse con distintos casos, especialmente cuando combina varios operadores.

Si una regla depende de tres variables booleanas, existen ocho combinaciones posibles de entrada. Pensar en forma de tabla de verdad ayuda a no omitir casos.

54.15 Errores comunes

  • Usar OR cuando la regla requiere AND.
  • Negar una condición incorrecta.
  • No usar paréntesis en expresiones largas.
  • Escribir condiciones que funcionan pero son difíciles de leer.
  • No probar combinaciones importantes de verdadero y falso.

54.16 Qué debes recordar de este tema

  • Una condición de programación puede interpretarse como una proposición lógica.
  • AND exige que varias condiciones se cumplan a la vez.
  • OR permite que al menos una condición sea verdadera.
  • NOT invierte el valor lógico de una condición.
  • Las leyes lógicas ayudan a escribir condiciones más claras y correctas.

54.17 Conclusión

La lógica aplicada a condiciones en programación permite tomar decisiones precisas, validar datos y controlar el flujo de ejecución. Cuanto mejor se entienden las expresiones lógicas, más claro y confiable puede ser el código.

En el próximo tema estudiaremos los operadores lógicos en lenguajes de programación.