La negación invierte el valor de verdad de una proposición. Es uno de los operadores más simples, pero también uno de los más importantes para expresar restricciones y condiciones.
La negación es un operador lógico que se aplica a una sola proposición. Si la proposición original es verdadera, su negación es falsa. Si la proposición original es falsa, su negación es verdadera.
En lenguaje natural suele expresarse con palabras como no, nunca, no es cierto que o no ocurre que.
En lógica matemática, la negación se representa habitualmente con el símbolo ¬. Si una proposición se llama p, su negación se escribe ¬p.
| Forma | Lectura | Ejemplo |
|---|---|---|
| p | p | El usuario está activo |
| ¬p | No p | El usuario no está activo |
En JavaScript, la negación se expresa con el operador !.
La tabla de verdad de la negación muestra todos los casos posibles.
| p | ¬p |
|---|---|
| V | F |
| F | V |
El operador ! invierte un valor booleano.
const activo = true;
console.log(!activo);
Como activo vale true, la expresión !activo devuelve false.
La negación se usa con frecuencia para expresar que una condición no se cumple.
const cuentaBloqueada = false;
if (!cuentaBloqueada) {
console.log("Puede ingresar");
} else {
console.log("La cuenta está bloqueada");
}
La condición !cuentaBloqueada significa "la cuenta no está bloqueada".
Negar dos veces una proposición devuelve el valor original. En símbolos:
const habilitado = true;
console.log(!!habilitado);
En JavaScript, !! también se usa para convertir ciertos valores a booleano explícito, aunque en lógica formal lo importante es entender que una doble negación recupera la proposición original.
La negación puede aplicarse a una comparación completa. Para evitar confusiones, se recomienda usar paréntesis cuando la expresión es larga.
const edad = 16;
if (!(edad >= 18)) {
console.log("No es mayor de edad");
}
La expresión !(edad >= 18) significa "no es cierto que la edad sea mayor o igual que 18".
Muchas negaciones pueden reescribirse de forma más directa.
| Forma con negación | Forma equivalente |
|---|---|
| !(edad >= 18) | edad < 18 |
| !(stock > 0) | stock <= 0 |
| !(nota < 6) | nota >= 6 |
| !(usuario === "admin") | usuario !== "admin" |
La forma más clara depende del caso. A veces una negación explícita es correcta, pero una comparación directa resulta más legible.
Los nombres de variables booleanas influyen mucho en la claridad de una negación.
| Menos claro | Más claro |
|---|---|
| !noActivo | activo |
| !sinPermiso | tienePermiso |
| !noValido | valido |
| !noDisponible | disponible |
Evitar dobles negaciones en los nombres ayuda a escribir condiciones más fáciles de entender.
La negación también puede aplicarse a una proposición compuesta. En ese caso, la negación afecta a toda la expresión encerrada entre paréntesis.
const emailVerificado = true;
const passwordCorrecta = false;
if (!(emailVerificado && passwordCorrecta)) {
console.log("No puede iniciar sesión");
}
La expresión niega el resultado completo de emailVerificado && passwordCorrecta. Más adelante estudiaremos las leyes de De Morgan para transformar este tipo de negaciones.
| Situación | Proposición | Negación |
|---|---|---|
| Validar una cuenta | La cuenta está verificada | La cuenta no está verificada |
| Controlar stock | Hay stock disponible | No hay stock disponible |
| Revisar permisos | El usuario tiene permiso | El usuario no tiene permiso |
| Validar formulario | El formulario es válido | El formulario no es válido |
En este ejemplo, una operación se permite solo si el usuario no está bloqueado y el recurso no está cerrado.
const usuarioBloqueado = false;
const recursoCerrado = false;
const usuarioPuedeOperar = !usuarioBloqueado && !recursoCerrado;
if (usuarioPuedeOperar) {
console.log("Operación permitida");
} else {
console.log("Operación rechazada");
}
La expresión contiene dos negaciones y una conjunción. Ambas negaciones deben ser verdaderas para permitir la operación.
La negación es un operador simple pero esencial. Permite expresar restricciones, condiciones contrarias y casos en los que una regla no se cumple.
En el próximo tema estudiaremos la conjunción, también conocida como operador AND.