Buscar este blog

lunes, 3 de mayo de 2010

Operadores Lógicos: Cortocircuitos

Al manipular los operadores lógicos se puede entrar en un fenómeno de "cortocircuito". Esto significa que la expresión se evaluará únicamente hasta que se pueda determinar sin ambigüedad la certeza o falsedad de toda la expresión. Como resultado, podría ocurrir que no sea necesario evaluar todas las partes de la expresión lógica. He aquí un ejemplo que muestra el funcionamiento de los cortocircuitos:

public class Cortocircuito {
 static boolean pruebal (int val) {
  System.out.println ("pruebal ( " + val + " ) " );
  System.out.println ("resultado: " + (val < 1) );
  return val < 1;
 }
 static boolean prueba2 (int val) {
  System.out.println ("prueba2 ( " + val + " ) " );
  System.out.println ("resultado: " + (val < 2) );
  return val < 2;
  }

 static boolean prueba3 (int val) {
  System.out.println ("prueba3 ( " + val + ") " );
  System.out.println ("resultado: " + (val < 3) );
  return val < 3;
 }

 public static void main (String[] args) {
  if (pruebal (0) && prueba2 (2) && prueba3 (2) )
   System.out.println("La expresion es verdadera");
  else
   System.out.println("La expresion es falsa");
 }
}
Cada test lleva a cabo una comparación con el argumento pasado y devuelve verdadero o falso. También imprime información para mostrar lo que se está invocando. Las comprobaciones se usan en la expresión:
if (pruebal (0) && prueba2 (2) && prueba3 (2))
Naturalmente uno podría pensar que se ejecutarían las tres pruebas, pero en la salida se muestra de otra forma:
La primera prueba produjo un resultado verdadero, de forma que la evaluación de la expresión
continúa. Sin embargo, el segundo test produjo un resultado falso. Puesto que esto significa que
toda la expresión va a ser falso ¿por qué continuar evaluando el resto de la expresión? Podría ser
costoso. Ésa es precisamente la razón para realizar un cortocircuito; es posible lograr un incremento
potencial de rendimiento si no es necesario evaluar todas las partes de la expresión lógica.

No hay comentarios:

Publicar un comentario