Las operaciones lógicas solo trabajan con valores booleanos (true /false), se usan para comprobar si una condición se cumple. Solo existen dos resultados posibles: true (verdadero, condición satisfecha), false (falso, condición no satisfecha).
Todos los if, comprobaciones de bucles while/for y condiciones switch del código se implementan internamente mediante operaciones lógicas.
Hay tres operadores principales: Y lógico, O lógico, NO lógico
| Operador | Nombre | Descripción de funcionamiento |
|---|---|---|
&& | Y lógico (AND) | El resultado es true solo si ambos lados son true; cuenta con evaluación cortocircuito |
| || | O lógico (OR) | El resultado es true si cualquiera de los lados vale true; cuenta con evaluación cortocircuito |
!expr | NO lógico (negación) | Invierte el valor booleano: true pasa a false y false a true |
El funcionamiento de Y, O y NO lógico es similar a los circuitos en serie y paralelos vistos en la educación secundaria. El circuito en serie equivale al Y lógico, el paralelo al O lógico.
1. Negación lógica !
Invierte el valor de una única expresión booleana.
Sintaxis:
!expresión_booleana
Ejemplo
void main() {
bool isMale = false;
print(!isMale); // true
bool flag = true;
print(!flag); // false
}Lenguaje del código: PHP (php)
Originalmente isMale vale false y flag true; al aplicar el operador de negación obtenemos el valor opuesto.
También se puede usar sobre expresiones completas, por ejemplo
void main() {
int age = 12;
print(!(age>18)); // true
}Lenguaje del código: JavaScript (javascript)
La expresión age > 18 da false inicialmente, pero al anteponer el símbolo ! se invierte y se imprime true.
2. Y lógico &&
| Expresión | Resultado |
|---|---|
true && true | true |
true && false | false |
false && true | false |
false && false | false |
Solo si ambos lados son true el resultado es true; si alguno es false, el resultado siempre será false.
Característica del cortocircuito: si el lado izquierdo vale false, el código del lado derecho no se ejecuta y se devuelve inmediatamente false.

La bombilla solo se enciende (true) cuando ambos interruptores están cerrados (true). Si al menos uno está abierto (false), la bombilla permanece apagada (false). Si sabemos que el lado izquierdo es false, no hace falta ejecutar el código derecho.
void main() {
bool fun1() {
print("La función se ha ejecutado!");
return true;
}
bool left = false;
// El lado izquierdo es false, por lo tanto fun1() no se ejecuta
bool res = left && fun1();
print("Resultado final: $res");
}Lenguaje del código: PHP (php)
Salida de ejecución
D:\dartdemo\firstdart>dart run
Building package executable...
Built firstdart:firstdart.
Resultado final: false
Lenguaje del código: PHP (php)
Incluso si fun1 contiene errores o excepciones, no se producirán fallos porque la función nunca se ejecuta.
Ejemplo práctico del Y lógico
void main() {
String name = 'admin';
String password = '123321';
// && solo cumple la condición si ambos lados son true
if (name=='admin' && password =='456654') {
print("Inicio de sesión correcto");
} else {
print("Usuario o contraseña incorrectos");
}
}Lenguaje del código: JavaScript (javascript)
Salida de ejecución
D:\dartdemo\firstdart>dart run
Building package executable...
Built firstdart:firstdart.
Usuario o contraseña incorrectosLenguaje del código: CSS (css)
3. O lógico ||
Si el lado izquierdo vale true, el código derecho no se ejecuta y se devuelve directamente true.
| Expresión | Resultado |
|---|---|
| true || true | true |
| true || false | true |
| false || true | true |
| false || false | false |
Veamos un ejemplo
void main() {
bool fun1() {
print("Ejecución de la función");
return true;
}
// El lado izquierdo es true, se activa el cortocircuito y fun1() no corre
bool res = true || fun1();
print(res); // true
}Lenguaje del código: PHP (php)
Como el lado izquierdo de || es true, la función fun1 de la derecha no se ejecuta.

Con dos interruptores, la bombilla se enciende (true) con que solo uno esté cerrado.
void main() {
bool isParentAgree = true;
int age = 12;
if(age>=13 || isParentAgree){
print("Se permite la entrada");
}
}Lenguaje del código: JavaScript (javascript)
Resumen
A && B: Si A es false, retorna false directamente, B no se evalúa ni ejecuta
A || B: Si A es true, retorna true directamente, B no se evalúa ni ejecuta
Mejora la velocidad de ejecución y evita errores (muy usado en comprobaciones de valores null)
Ejemplo:
String? name;
// Solo accede a length si name no es null; el cortocircuito evita error de referencia nula
if(name != null && name.length > 0)
{
}Lenguaje del código: JavaScript (javascript)
Si llamáramos directamente a name.length se produciría un error, ya que name vale null y no tiene la propiedad length. Al comprobar primero name != null: si name es null la primera condición es false y el resto no se ejecuta, evitando el fallo.
Prioridad de los tres operadores lógicos
! > && > ||
Al igual que en las operaciones matemáticas, los operadores con mayor prioridad se calculan primero. Usa paréntesis
()para modificar el orden de cálculo.
if (!done && (col == 0 || col == 3)) {
// ...Realizar una acción...
}Lenguaje del código: JavaScript (javascript)
Orden detallado de cálculo:
- Dentro de paréntesis: calcular primero
col == 0 || col == 3(comprobar si la columna es 0 o 3) - Aplicar negación con
!done - Unir ambos resultados con el operador
&&
Ejemplo
void main() {
bool done = false;
int col = 3;
// Ejemplo oficial
if (!done && (col == 0 || col == 3)) {
print("Ejecución lógica: no finalizado y columna 0 o 3");
}
// Demostración negación lógica !
bool isFinish = true;
print(!isFinish); // false
// Demostración Y lógico &&
int a = 10, b = 20;
if (a > 5 && b > 10) {
print("a mayor que 5 Y b mayor que 10");
}
// Demostración O lógico ||
int score = 55;
if (score < 60 || score > 90) {
print("Nota suspensa O nota excelente");
}
// Demostración cortocircuito
bool func() {
print("La función se ejecutó");
return true;
}
false && func(); // Lado izquierdo false, func no imprime nada
true || func(); // Lado izquierdo true, func no imprime nada
}Lenguaje del código: PHP (php)
Salida de ejecución
D:\dartdemo\firstdart>dart run
Building package executable...
Built firstdart:firstdart.
Ejecución lógica: no finalizado y columna 0 o 3
false
a mayor que 5 Y b mayor que 10
Nota suspensa O nota excelenteLenguaje del código: JavaScript (javascript)