Saltar al contenido

¿Qué es un cortocircuito y cómo se usa al programar en Java?

Si encuentras algún detalle que no entiendes puedes comentarlo y te ayudaremos lo más rápido posible.

Solución:

El cortocircuito es cuando se deja de evaluar una expresión tan pronto como se determina su resultado. Entonces, por ejemplo:

if (a == b || c == d || e == f) 
    // Do something

Si a == b es truedespués c == d y e == f son nunca evaluado en absoluto, porque el resultado de la expresión ya se ha determinado. si a == b es falsedespués c == d es evaluado; si es truedespués e == f nunca se evalúa. Puede parecer que esto no hace ninguna diferencia, pero considere:

if (foo() || bar() || baz()) 
    // Do something

Si foo() devoluciones truedespués bar y baz son nunca llamó, porque el resultado de la expresión ya se ha determinado. Así que si bar o baz tiene algún otro efecto que simplemente devolver algo (un efecto secundario), esos efectos nunca ocurren.

Un gran ejemplo de cortocircuito se relaciona con las referencias a objetos:

if (a != null && a.getFoo() != 42) 
    // Do something

a.getFoo() normalmente lanzaría un NullPointerException si a fueron nullsino porque la expresión cortocircuitos, si a != null es falsela a.getFoo() parte nunca sucede, por lo que no obtenemos una excepción.

Tenga en cuenta que no todas las expresiones están cortocircuitadas. los || y && los operadores están en cortocircuito, pero | y & no son, ni son * o /; de hecho, la mayoría de los operadores no lo son.

La evaluación de cortocircuito significa que al evaluar expresiones booleanas (lógica AND y OR) puede detenerse tan pronto como encuentre la primera condición que satisface o niega la expresión.

Por ejemplo, suponga que está evaluando una lógica OR con varias subexpresiones, cada una de las cuales es muy costosa de evaluar:

if (costlyTest1() || costlyTest2() || costlyTest3()) { // ...

La JVM puede dejar de evaluar las funciones “costlyTest” tan pronto como encuentre una que devuelva true, ya que eso satisfará inmediatamente la expresión booleana. Así que si costlyTest1() devoluciones true entonces se saltarán las otras pruebas. Similarmente:

if (costlyTest1() && costlyTest2() && costlyTest3()) { // ...

La JVM puede dejar de evaluar las funciones tan pronto como encuentre una que devuelva false, ya que eso niega inmediatamente la expresión; Así que si costlyTest1() devoluciones false entonces las otras funciones no serán llamadas.

Estas reglas pertenecen a cualquier nivel de anidamiento de expresiones booleanas y se pueden aprovechar para evitar trabajo innecesario, como se demuestra en los ejemplos anteriores.

Short Circuit: Si la primera parte es true no se moleste en evaluar el resto de la expresión. La misma lógica se aplica para false En el caso de && que también es un cortocircuito

Reseñas y valoraciones del post

Ten en cuenta mostrar este post si te ayudó.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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