Saltar al contenido

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

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 verdad, entonces c == d y e == f están nunca evaluado en absoluto, porque el resultado de la expresión ya se ha determinado. si a == b es falso, entonces c == d se evalúa; si es cierto, entonces e == f nunca se evalúa. Es posible que esto no parezca hacer ninguna diferencia, pero considere:

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

Si foo() devuelve verdadero, entonces bar y baz están nunca llamado, 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, pero debido a que la expresión cortocircuitos, si a != null es false, los a.getFoo() parte nunca sucede, por lo que no obtenemos una excepción.

Tenga en cuenta que no todas las expresiones están en cortocircuito. 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 satisfaga o niegue la expresión.

Por ejemplo, suponga que está evaluando una lógica OR con varias sub-expresiones, 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() devuelve verdadero, entonces se omitirán las otras pruebas. Similar:

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

La JVM puede dejar de evaluar las funciones tan pronto como encuentre una que devuelva false, ya que inmediatamente niega la expresión; Así que si costlyTest1() devuelve falso, 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 trabajos innecesarios, 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 a false En el caso de && que también está en cortocircuito

¡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 *