Construir expresiones lógicas consiste en identificar proposiciones simples, elegir los operadores adecuados y agrupar las condiciones para representar una regla con precisión.
Hasta ahora estudiamos proposiciones y operadores lógicos por separado. En la práctica, necesitamos combinarlos para representar reglas completas.
Una expresión lógica puede surgir de una frase en lenguaje natural, de una regla de negocio, de una validación de formulario o de una condición dentro de un algoritmo.
Una expresión lógica es una combinación de proposiciones, variables y operadores lógicos que produce un valor de verdad.
En programación, una expresión lógica normalmente produce true o false.
Para construir una expresión lógica conviene seguir un proceso ordenado.
Comencemos con esta regla:
Las proposiciones simples son:
La expresión lógica es:
La misma regla puede escribirse en código usando variables booleanas.
const usuarioActivo = true;
const esEditor = true;
const puedePublicar = usuarioActivo && esEditor;
console.log(puedePublicar);
El operador && representa la conjunción lógica.
Ahora consideremos una regla con alternativas:
Podemos definir:
La expresión lógica es:
const esAdmin = false;
const esSupervisor = true;
const puedeAccederPanel = esAdmin || esSupervisor;
console.log(puedeAccederPanel);
La negación aparece cuando una regla exige que algo no ocurra.
Si p significa "la cuenta está bloqueada", entonces la expresión es:
const cuentaBloqueada = false;
const puedeIngresar = !cuentaBloqueada;
console.log(puedeIngresar);
Cuando una regla mezcla varios operadores, los paréntesis indican cómo se agrupan las condiciones.
Definimos:
La expresión es:
La expresión anterior puede implementarse así:
const esAdmin = false;
const esAutor = true;
const documentoBloqueado = false;
const puedeEditar = esAdmin || (esAutor && !documentoBloqueado);
console.log(puedeEditar);
Los paréntesis son importantes porque muestran que esAutor y !documentoBloqueado forman un grupo.
Algunas reglas se expresan mejor como implicaciones.
Definimos:
La expresión lógica es:
Como p → q equivale a ¬p ∨ q, puede implementarse así:
const edad = 16;
const tieneAutorizacion = true;
const esMenor = edad < 18;
const reglaCumplida = !esMenor || tieneAutorizacion;
console.log(reglaCumplida);
Una regla con "si y solo si" exige que dos proposiciones coincidan.
La expresión lógica es:
const formularioValido = true;
const botonHabilitado = true;
const reglaInterfazCorrecta = formularioValido === botonHabilitado;
console.log(reglaInterfazCorrecta);
| Lenguaje natural | Símbolo lógico | JavaScript |
|---|---|---|
| No p | ¬p | !p |
| p y q | p ∧ q | p && q |
| p o q | p ∨ q | p || q |
| p o q, pero no ambas | p ⊕ q | p !== q |
| Si p, entonces q | p → q | !p || q |
| p si y solo si q | p ↔ q | p === q |
Cuando una expresión es larga, es mejor dividirla en subexpresiones con nombres claros.
const edad = 24;
const emailVerificado = true;
const cuentaBloqueada = false;
const aceptoTerminos = true;
const esMayorDeEdad = edad >= 18;
const puedeUsarCuenta = emailVerificado && !cuentaBloqueada;
const registroCompleto = esMayorDeEdad && puedeUsarCuenta && aceptoTerminos;
console.log(registroCompleto);
Esta forma facilita revisar cada parte de la regla por separado.
Una expresión lógica debe probarse con casos representativos. Esto ayuda a detectar si la regla fue traducida correctamente.
| Caso | Datos | Resultado esperado |
|---|---|---|
| Usuario válido | Mayor de edad, email verificado, cuenta activa | Permitir registro |
| Menor sin autorización | Menor de edad, sin autorización | Rechazar |
| Cuenta bloqueada | Email verificado, pero cuenta bloqueada | Rechazar ingreso |
Construir expresiones lógicas requiere pasar de reglas en lenguaje natural a proposiciones y operadores precisos. Esta habilidad es esencial para escribir condiciones correctas en programas.
En el próximo tema estudiaremos la precedencia de operadores lógicos.