zur vorherigen Seite   zum Inhaltsverzeichnis   zur nächsten Seite

Antwort:

Die schnellere Methode sollte links stehen, da die Auswertung sofort fertig ist, wenn sie false zurückgibt.

if ( beiMirGehtDasSchnell() && meineAuswertungDauertStunden() )
   ....

Aufpassen vor Seiteneffekten

Wenn die erste Methode false zurückgibt, wird die zweite Methode erst gar nicht ausgewertet und spart Zeit. Das Ergebnis der Auswertung des Boole'schen Ausdrucks ist false, immer wenn die Methode beiMirGehtDasSchnell() false ist. Nur wenn sie true ist, wird die zeitraubende Methode ausgeführt.

Achtung: Dieser Trick funktioniert nur dann korrekt, wenn die ausgelassene Methode nichts Permanentes tut. Mit anderen Worten, Short-Circuit-Auswertung ist nur dann sicher, wenn die ausgelassene Methode nichts anderes tut als true oder false zu berechnen. Short-Circuit-Auswertung ist nicht sicher, wenn die ausgelassene Methode mehr als das tut. Zum Beispiel:

boolean meineAuswertungDauertStunden()
{
  // mache eine permanente Änderung eines Objekts, das
  // im weiteren Programm verwendet wird

  // jetzt gib ein true oder false zurück
}

Wenn eine Methode eine permanente Änderung an Daten vornimmt, muss sie unabhängig von dem true/false-Wert der anderen Methode aufgerufen werden. Wenn eine Methode eine permanente Änderung an Daten vornimmt, dann sagt man von der Methode, dass sie einen Seiteneffekt hat. Wir müssen vorsichtig sein, wenn wir einen Short-Circuit Operator verwenden.

FRAGE 3:

(Denkfrage: ) Müssen wir uns bei einer Methode, die ein int zurückgibt, Gedanken über Seiteneffekte machen. Klickt hier für einen