¿Qué es la evaluación de cortocircuito?

Una evaluación de cortocircuito es cuando en un lenguaje de programación, una expresión conformada de operadores booleanos, deja de evaluarse de forma temprana en el momento que la evaluación de uno de sus argumentos es suficiente para saber el resultado de la expresión completa.

Nota: En los ejemplos a continuación estaré utilizando Ruby.

En el caso del operador AND, la expresión dejara de evaluarse en cuanto uno de los argumentos sea falso. En la expresión a continuación, b solamente será evaluada, si y solo si a es verdadero.

a && b

En el caso del operador OR, la expresión dejará de evaluarse en cuanto uno de los argumentos sea verdadero. En la expresión a continuación, b solamente será evaluada, si y solo si a es falso.

a || b

Mejor rendimiento

Uno de los beneficios de la evaluación de cortocircuito es que si ordenamos nuestro código de forma correcta, obtendremos mejor rendimiento ya que ciertas ramas de nuestro código no serán ejecutadas.

Si tenemos por ejemplo dos chequeos, fast_check y slow_check que sabemos se ejecutan de forma rápida y lenta respectivamente. Entonces podemos poner slow_check al final de nuestra expresión, para asegurarnos que solo se ejecute cuando es necesario, por ejemplo

fast_check && slow_check

Cada vez que fast_check sea falso, nuestro código se ahorrará la ejecución de slow_check.

Cláusula de seguridad

Además de mejor rendimiento, la evaluación de cortocircuito nos permite utilizar el argumento previo, como una cláusula de seguridad. En la cual solo ejecutaremos el segundo argumento, si estamos seguros que el primero es verdadero.

Un ejemplo es cuando tenemos un objeto y queremos llamar un método del mismo.

dog.bark

En lenguajes cómo Ruby, que es de tipado dinámico, es común que a un objeto se le asigne el valor nulo. En cuyo caso obtendríamos el siguiente error:

dog.bark #=> NoMethodError (undefined method `bark' for nil:NilClass)

En dicho caso lo que podemos hacer es evaluar primero que el objeto dog no sea nulo antes de llamar el método bark.

!dog.nil? && dog.bark #=> "Woof"

Cómo en Ruby solamente nil y false son evaluados como falsos, lo podemos escribir más elegantemente cómo

dog && dog.bark #=> "Woof"

Código más idiomático

Lo cual me lleva al siguiente punto. Gracias a la evaluación de cortocircuito podemos escribir código más idiomático. Por ejemplo en el caso del uso del operador ternario.

value = a ? a : b

Se puede escribir como

value = a || b

Resumen

Conocer si el lenguaje en el cual programamos, utiliza la evaluación de cortocircuito, nos permite escribir código con mejor rendimiento, más seguro y más idiomático. Esta es además una de esas cosas que se suelen preguntar en una entrevista técnica para filtrar a aquellos participantes que conocen a fondo un lenguaje de programación.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.