dedlfix: Schleifen abbrechen

Beitrag lesen

Hi!

Durchaus sinnvoll finde ich allerdings etwas wie (Pseudocode):

Iterator it = liste.getIterator();

bool found = false;

while (it.getNext() && !found) {
if (it.CurrentElement ... ) { // prüfen, ob das das gesuchte Element ist
  // hier irgendwas damit anstellen
  found = true;
}
}


>   
> Dabei ist nämlich die Abbruchbedingung im Schleifenkopf ersichtlich, was bei  
>   
> ~~~java

Iterator it = liste.getIterator();  

> while (it.getNext()) {  
>  if (it.CurrentElement ... ) { // prüfen, ob das das gesuchte Element ist  
>   // hier irgendwas damit anstellen  
>   break;  
>  }  
> }

nicht der Fall ist. Oder spricht irgendwas gegen die obere Variante?

In meinen Augen schon. Die drei Zeilen sind noch recht übersichtlich. Aber wenn da noch weiterer Code hinzukommt, besonders welcher zwischen "found = true" und dem Schleifenende, braucht es noch ein continue. Das ist aber irgendwie logisch nicht sehr sinnvoll, denn es soll ja nicht weitergehen sondern die Schleife beendet werden. Man benötigt aber dieses "fortsetzen", um zum Schleifenanfang und damit zur Auswertung von found zu gelangen.

Auch ansonsten empfinde ich das als einen unnötigen Zwischenschritt. Das break ist klar. Beim found=true muss ich erst verfolgen, was mit diesem Wert demnächst angestellt wird. Es suggeriert vielleicht ein Ende, aber verlassen würde ich mich darauf nicht. Fehler verstecken sich am liebsten hinter nicht überprüftem aber angenommenen Verhalten. Und dass die Schleife beim Finden abgebrochen wird, kann man auch als Kommentar hinterlassen, wenn der Code so <del>unübersichtlich</del><ins>komplex</ins> ist, dass man das nicht auf einen Blick erkennt.

Lo!