El álgebra de Boole estudia valores binarios y operaciones lógicas. Permite simplificar condiciones, razonar sobre decisiones de software y describe la base matemática de los circuitos digitales.
Un programa toma decisiones de manera constante: permitir o negar acceso, repetir una tarea, validar un formulario, ejecutar una acción según el estado de un sistema. Estas decisiones se expresan mediante condiciones que pueden ser verdaderas o falsas.
El álgebra de Boole proporciona reglas para trabajar con esas condiciones. Sus operaciones básicas son la conjunción, la disyunción y la negación, conocidas en programación como AND, OR y NOT.
El álgebra booleana clásica usa dos valores: 0 y 1. Según el contexto se interpretan como falso y verdadero, apagado y encendido, o ausencia y presencia de una señal.
Los números 0 y 1 son símbolos de estados, no cantidades sobre las que se apliquen las reglas usuales de la aritmética. Por ejemplo, 1 + 1 vale 1 si el símbolo + representa OR, no 2.
La negación de una proposición p, escrita ¬p, invierte su valor lógico. En JavaScript se escribe normalmente con !.
| p | ¬p |
|---|---|
| 0 / falso | 1 / verdadero |
| 1 / verdadero | 0 / falso |
Ejemplo: si cuentaActiva es verdadero, !cuentaActiva expresa que la cuenta no está activa.
La conjunción p ∧ q es verdadera solo cuando p y q son verdaderas. En JavaScript se representa con &&.
| p | q | p ∧ q |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
Una condición «tiene credencial y cuenta activa» solo es verdadera si se cumplen ambos requisitos. AND es la operación adecuada para combinar condiciones obligatorias.
La disyunción p ∨ q es verdadera cuando al menos una de las proposiciones es verdadera. En JavaScript se representa con ||.
| p | q | p ∨ q |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |
En lógica, OR suele ser inclusivo: si ambas condiciones son verdaderas, el resultado también lo es. El OR exclusivo, que exige exactamente una condición verdadera, es otra operación y se estudia más adelante.
| Operación | Notación lógica | Notación booleana usual | JavaScript |
|---|---|---|---|
| Negación | ¬p | p' | !p |
| Conjunción | p ∧ q | p·q | p && q |
| Disyunción | p ∨ q | p + q | p || q |
| Verdadero | ⊤ | 1 | true |
| Falso | ⊥ | 0 | false |
Los signos + y · usados en álgebra de Boole no son suma y multiplicación aritméticas. En código, usar los operadores lógicos explícitos evita esa ambigüedad.
Un álgebra de Boole es una estructura con un conjunto de elementos, dos operaciones binarias (∧ y ∨), una operación de complemento (¬) y elementos distinguidos 0 y 1 que cumplen ciertas leyes.
El conjunto {0, 1} es el álgebra de Boole más conocida. También lo es el conjunto potencia de un conjunto U, usando intersección, unión y complemento respecto de U.
La primera pareja muestra qué valor no cambia una expresión. La segunda muestra qué valor decide el resultado sin importar la otra entrada. Estas leyes ayudan a simplificar condiciones antes de implementarlas.
Una condición repetida no agrega información. En cambio, una condición combinada con su negación produce una contradicción con AND y una tautología con OR.
Podemos cambiar el orden o reagrupar condiciones conectadas únicamente por el mismo operador sin modificar el resultado lógico. Esto no autoriza a ignorar paréntesis cuando se mezclan AND y OR.
En álgebra booleana, ambas operaciones se distribuyen una sobre la otra:
La segunda ley es notable porque no tiene un análogo en la aritmética ordinaria. La distributividad permite reescribir expresiones en formas útiles para simplificación, circuitos y consultas.
Si p ya es verdadera, el término adicional no cambia el OR; si p es falsa, también es falso p ∧ q. Reconocer absorciones evita condiciones redundantes.
Las leyes de De Morgan describen cómo distribuir una negación sobre una expresión compuesta:
Estas leyes son fundamentales para transformar condiciones negativas, filtros y validaciones. También conectan la lógica con los complementos, uniones e intersecciones de conjuntos.
Consideremos la expresión p ∧ (p ∨ q). Aplicando la ley de absorción obtenemos directamente p.
La segunda transformación usa distributividad, complemento e identidad. El resultado indica que el valor de q no influye en la expresión original.
Dos expresiones son lógicamente equivalentes si producen el mismo resultado para toda combinación posible de sus variables. Una tabla de verdad permite comprobarlo de forma exhaustiva cuando hay pocas variables.
| p | q | p ∧ (p ∨ q) | p |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 0 |
| 1 | 0 | 1 | 1 |
| 1 | 1 | 1 | 1 |
La tabla verifica la absorción para dos variables. Con n variables hay 2n filas, por lo que las leyes algebraicas son preferibles cuando la cantidad de variables crece.
function puedeAcceder(esAdmin, tieneMembresia, cuentaActiva) {
return cuentaActiva && (esAdmin || tieneMembresia);
}
console.log(puedeAcceder(true, false, true)); // true
console.log(puedeAcceder(false, true, true)); // true
console.log(puedeAcceder(false, true, false)); // falseLos paréntesis hacen explícita la intención. Primero se resuelve la alternativa «administrador o membresía», y luego se exige que la cuenta esté activa.
En JavaScript, ! tiene mayor precedencia que &&, y && mayor que ||. Aun así, los paréntesis mejoran la legibilidad y evitan suposiciones erróneas.
function obtenerNombre(usuario) {
return usuario && usuario.nombre;
}
console.log(obtenerNombre({ nombre: "Ana" })); // "Ana"
console.log(obtenerNombre(null)); // nullLos operadores && y || usan cortocircuito: pueden evitar evaluar la segunda parte. Además devuelven uno de sus operandos, no siempre un booleano; para una condición estrictamente booleana se puede usar Boolean(valor) o !!valor.
JavaScript distingue los operadores lógicos &&, || y ! de los operadores bit a bit &, | y ~. Los segundos actúan sobre la representación binaria de números enteros.
Los operadores bit a bit son útiles para máscaras y banderas, pero convierten sus operandos a enteros de 32 bits. Para condiciones ordinarias se deben usar los operadores lógicos.
Para un universo U, los subconjuntos de U forman un álgebra de Boole si interpretamos:
Las leyes de De Morgan de conjuntos son exactamente las versiones de las leyes lógicas: el complemento de una intersección es la unión de los complementos, y viceversa.
Una expresión lógica clara facilita revisar reglas complejas. Simplificar no solo puede ahorrar operaciones: también reduce la posibilidad de que una condición de seguridad o negocio se interprete mal.
& o | cuando corresponde && o ||.&& y || siempre devuelven true o false.El álgebra de Boole permite pasar de reglas expresadas en lenguaje natural a condiciones precisas y comprobables. En el próximo tema estudiaremos funciones booleanas, que asignan un resultado lógico a cada combinación de entradas.