programacion-operadores-logicos

Operadores lógicos

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:

OperadorEjemplo
ANDtrue AND true = true
ORtrue OR false = true
NOTNOT 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.

ABA AND BA OR B
FalseFalseFalseFalse
FalseTrueFalseTrue
TrueFalseFalseTrue
TrueTrueTrueTrue
  • AND devuelve true si ambos operandos son true, y false en caso contrario
  • OR devuelve true si al menos uno de los operandos es true

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.

ANOT A
FalseTrue
TrueFalse

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

OperadorEjemplo
ANDtrue && true = true
ORtrue || 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 un false y evalúa a false la expresión.
  • OR detiene la evaluación en cuanto encuentra un true, y evalúa a true la expresión

Es decir,

OperadorEjemplo
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