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 null
sino porque la expresión cortocircuitos, si a != null
es false
la 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ó.