Los operadores lógicos son utilizados para realizar operaciones booleanas en valores y variables. Estos operadores son utilizados en estructuras condicionales y bucles para combinar varias condiciones y obtener un resultado final.
Los operadores lógicos más comunes son AND
, OR
y NOT
:
Operador | Ejemplo |
---|---|
AND | true AND true = true |
OR | true OR false = true |
NOT | NOT true = false |
Operadores AND y OR
Las operaciones AND
y OR
son operaciones lógicas básicas, cuyo resultado viene dato por la siguiente tabla.
A | B | A AND B | A OR B |
---|---|---|---|
False | False | False | False |
False | True | False | True |
True | False | False | True |
True | True | True | True |
AND
devuelvetrue
si ambos operandos sontrue
, yfalse
en caso contrarioOR
devuelvetrue
si al menos uno de los operandos estrue
Si lo pensáis un poco, es el sentido que usamos habitualmente para la palabra Y
y O
, respectivamente, en el uso cotidiano.
Por ejemplo, cuando tu dices
Cojo el abrigo si llueve Y hace frío
Coges el abrigo sólo si se cumplen las dos condiciones a la vez.
Mientras que cuando dices,
Cojo el abrigo si llueve O hace frío
Coges el abrigo con que se cumpla una de las dos condiciones.
Operadores NOT
Por su lado, el operador NOT
es muy sencillo, y simplemente invierte un valor lógico.
A | NOT A |
---|---|
False | True |
True | False |
Las tablas que hemos visto están asociadas a el álgebra booleana, y normalmente se denominan tablas de verdad
Ejemplo en distintos lenguajes
En los lenguajes con sintaxis heredera de C los operadores son &&
, ||
y !
.
Operador | Ejemplo |
---|---|
AND | true && true = true |
OR | true || false = true |
NOT | !true = false |
Por ejemplo, en C, C++, C# y Java los operadores lógicos son idénticos, y tienen la siguiente forma.
bool or_a_b = a || b;
bool and_a_b = a && b;
bool not_a_b = !a;
Que es idéntico al caso de JavaScript, con la única diferencia de que la variable se declara con la palabra clave let
.
let or_a_b = a || b;
let and_a_b = a && b;
let not_a_b = !a;
Otros lenguajes, como por ejemplo Python, SQL o VB, se emplea la palabra AND
, OR
y NOT
como operadores. Por ejemplo, así luciría los ejemplos anteriores en Python.
or_a_b = a or b
and_a_b = a and b
not_a_b = not a
Operadores cortocircuitados
En muchos lenguajes, tanto AND
como OR
ofrecen versiones cortocircuitadas. Esto operadores son un mecanismo para agilizar la evaluación de expresiones.
Un operador cortorcircuitado detiene la evaluación en cuanto sabe el resultado sin necesidad de evaluar el resto de operadores
Para ello se usa el “truco” de que una operación con varios AND
será false
, con que uno de los miembros sea false
. De forma similar, una serie de condiciones con OR
será true
con que uno de sus miembros sea true
.
Podemos usar esto para agilizar el cálculo de expresiones, que es precisamente lo que hacen las versiones cortocircuitadas.
AND
detiene la evaluación en cuanto encuentra unfalse
y evalúa afalse
la expresión.OR
detiene la evaluación en cuanto encuentra untrue
, y evalúa atrue
la expresión
Es decir,
Operador | Ejemplo |
---|---|
AND (&&) | false && (esto no se va a evaluar) |
OR (||) | true || (esto no se va a evaluar) |
Por ejemplo, en esta expresión de C#,
// si (a > b) es verdadero
// (c < d) nunca llegará a evaluarse
bool result = (a > b) && (c < d);
En general, casi siempre usaremos las versiones cortocircuitadas de los operadores, porque son más eficientes