14 de septiembre de 2018

Operadores lógicos

Para terminar la explicación básica de los operadores en Java, vamos a ver los operadores lógicos. Estos operadores nos van a permitir realizar operaciones con valores boolean.

Los operadores lógicos en Java son:
  1. Y (puerta lógica AND): &
  2. O (puerta lógica OR): |
  3. Y condicional: &&
  4. O condicional: ||
  5. Negación (puesta lógica NOT): !
Los 4 primeros son operadores binarios y el último es unario (niega un valor).

Los operadores lógicos realizan operaciones sobre valores boolean actuando como puertas lógicas


 Para los que no lo conozcan, el funcionamiento de las puertas lógicas es:
  • AND: El resultado será verdadero (true) sólo si ambos operandos son true. En el resto de casos se evalua a falso (false)
  • OR: El resultado será false sólo si ambos operandos son false. En el resto de casos se evalua a true.
  • NOT: Devuelve lo contrario.

¿Qué diferencia hay en los operadores condicionales?

A los operadores Y/O condicionales se les llama también "cortocircuito". La diferencia entre éstos y su versión no cortocircuitada se ve a la hora de evaluar la expresión. Veamos un ejemplo con Y condicional:
resultado = condicion1 && condicion2 && condicion3
En este ejemplo si condicion1 es true se seguirá evaluando si condicion2 también lo es, pues para saber el resultado hay que llegar hasta el final o hasta que una condicion sea false. Si se encuentra una condición false entonces no hace falta seguir evaluando pues el resultado final va a ser false.

Si lo vemos para O condicional:
resultado = condicion1 || condicion2 || condicion3
Aquí pasa algo parecido pero a la inversa. Se parará de evaluar en cuanto se encuentre que una condición es true pues el resultado final será true independientemente del resto de condiciones.

Los operadores lógicos cortocircuitados evitan la evaluación restante de la expresión cuando conocen el valor resultante global


A primera vista podría simplemente parecer una diferencia de rendimiento (si evito operaciones irá todo más rápido), pero lo fundamental es si queremos que se evalue una condición o no. Ahora mismo es pronto para ver la diferencia. Lo veremos cuando lleguemos a Clases y se explique el concepto de null.

Este código servirá para ver un ejemplo de las puertas lógicas:
boolean v = true;
boolean f = false;

System.out.println(v + " & " + v + " = " + (v & v));
System.out.println(v + " & " + f + " = " + (v & f));
System.out.println(v + " | " + f + " = " + (v | f));
System.out.println(f + " | " + f + " = " + (f | f));
System.out.println("!" + v + " = " + !v);
System.out.println("!" + f + " = " + !f);
Su salida es:

true & true = true
true & false = false
true | false = true
false | false = false
!true = false
!false = true


Echaréis en falta probar los operadores cortocircuitados. Precisamente son los que se utilizan habitualmente, pero en un ejemplo tan sencillo sin haber visto métodos es dificil demostrar el corte que se produce, por eso se ve cuando hemos visto métodos y aprendemos las condiciones.

No hay comentarios:

Publicar un comentario

Compárteme

Entradas populares