7. Negación

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.

7.1 Introducción

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.

7.2 Símbolos de la negación

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 !.

7.3 Tabla de verdad de la negación

La tabla de verdad de la negación muestra todos los casos posibles.

p ¬p
V F
F V
La negación siempre invierte el valor de verdad: verdadero pasa a falso y falso pasa a verdadero.

7.4 Negación en JavaScript

El operador ! invierte un valor booleano.

const activo = true;

console.log(!activo);

Como activo vale true, la expresión !activo devuelve false.

7.5 Negar una condición

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".

7.6 Doble negación

Negar dos veces una proposición devuelve el valor original. En símbolos:

¬(¬p) equivale a p
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.

7.7 Negar comparaciones

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".

7.8 Reescribir una negación

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.

7.9 Negación y nombres de variables

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.

7.10 Negación de una proposición compuesta

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.

7.11 Casos prácticos

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

7.12 Ejemplo completo

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.

7.13 Errores comunes

  • Olvidar que ! invierte el valor booleano.
  • Usar nombres negativos y luego volver a negarlos.
  • No colocar paréntesis al negar una expresión compuesta.
  • Escribir !(x >= 10) cuando x < 10 sería más claro.
  • Confundir la negación de una parte con la negación de toda la expresión.

7.14 Qué debes recordar de este tema

  • La negación invierte el valor de verdad de una proposición.
  • En lógica se representa como ¬p; en JavaScript, como !p.
  • La doble negación equivale a la proposición original.
  • Los paréntesis son importantes al negar expresiones compuestas.
  • Los nombres booleanos claros reducen errores con negaciones.

7.15 Conclusió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.