Il cortocircuito è dove viene arrestata un'espressione che viene valutata non appena viene determinato il suo risultato. Così, per esempio:
if (a == b || c == d || e == f) {
// Do something
}
Se a == b
è vero, allora c == d
e e == f
sono mai valutati affatto, perché l'esito del espressione è già stato determinato. se a == b
è falso, viene valutato c == d
; se è true, quindi e == f
non viene mai valutato. Questo può non sembrare a fare alcuna differenza, ma prendere in considerazione:
if (foo() || bar() || baz()) {
// Do something
}
If foo()
restituisce vero, allora bar
e baz
sono mai chiamati, perché l'esito del espressione è già stato determinato. Quindi, se bar
o baz
ha qualche altro effetto oltre a restituire qualcosa (un effetto collaterale ), quegli effetti non si verificano mai.
Un grande esempio di corto circuito si riferisce ad oggetto riferimenti:
if (a != null && a.getFoo() != 42) {
// Do something
}
a.getFoo()
normalmente lanciare una NullPointerException
se a
erano null
, ma perché l'espressione cortocircuiti, se a != null
è false
, la parte a.getFoo()
non succede mai, quindi non otteniamo un'eccezione.
Si noti che non tutte le espressioni sono cortocircuitate. Gli operatori ||
e &&
sono cortocircuitati, ma |
e &
non sono, né sono *
o /
; in effetti la maggior parte degli operatori non lo sono.
fonte
2012-02-18 21:44:27
http://en.wikipedia.org/wiki/Short-circuit_evaluation – Matt