Was sind die besseren Möglichkeiten, um das Do-While zu vermeiden (falsch)? Hack in Java?

8

Wenn der Code wie folgt lautet:

%Vor%

Ich habe diese Arbeit im Allgemeinen gesehen, um diesen unordentlichen Codefluss zu vermeiden:

%Vor%

Was sind einige bessere Möglichkeiten, um diese Workaround / Hack zu vermeiden, so dass es zu einem Code auf höherer Ebene (Branchenebene) wird?

Gibt es vielleicht Konstrukte, die von Apache commons oder Google Guava stammen?

Hinweis: Dies ist eine Kopie von dieselbe Frage für C ++ . Die besten Antworten gibt es wirklich Funktionen Zeiger und der GOTO-Befehl. Beide existieren nicht in Java. Ich bin sehr interessiert an der gleichen Sache für Java.

Es ist meiner Meinung nach keine gute Lösung, es in eine neue Funktion zu bringen und return zu verwenden, da return die Methode beendet. Also, wenn meine Klasse 20 Methoden mit diesen Konstrukten hat, müsste ich 20 zusätzliche Methoden hinzufügen, um dies zu erreichen. Deshalb war GOTO die beste Antwort für C ++.

    
Kenyakorn Ketsombut 30.08.2013, 09:28
quelle

5 Antworten

6

Was ist das "während (falscher)" Nichts? Verwenden Sie ein Etikett!

%Vor%

Es ist Kern-Java: Ссылка

    
mvmn 12.09.2013, 19:30
quelle
7

Um die zyklomatische Komplexität zu reduzieren, können Sie die Logiken in Untermethoden aufteilen:

%Vor%     
sp00m 30.08.2013 09:41
quelle
2
  

Weil Sie dies 20 Mal in einer Funktion haben können, um 20 serielle Schritte zu bestehen. Wenn ich es so mache, schiebt das Final ob 20 Tabs nach rechts, was den Code unlesbar macht.

Dieser Kommentar von Ihnen zeigt das Problem: Sie stellen sich die falsche Codestruktur vor.

Zum Beispiel ist Ihr Code wie folgt

%Vor%

Dies kann einfach umstrukturiert werden:

%Vor%

Diese Art von Code-Struktur wäre eine gute Probe von Clean Code, da die Methoden ihre "single purpose" Sachen machen, Sie nicht einen While-Loop-Hack machen und sogar die Methoden irgendwo wiederverwenden könnten.

>     
WarrenFaith 30.08.2013 09:41
quelle
0

Es ist eine gute Frage. Die Semantik jeder Lösung muss eine Art von erregbarem Block enthalten, entweder literal oder implizit durch die Implementierung, die beendet werden kann.

Einige der anderen Antworten sind so kompliziert, dass sie, während sie die Do-while-Schleife vermeiden, alle Klarheit und Lesbarkeit verlieren, was sie zu "schlechtem" Code macht.

Nach einigem Nachdenken, so würde ich es kodieren:

%Vor%

Wichtigste Punkte:

  • Eine Methode ist ein Block, der von return sauber verlassen wird.
  • Die drei Teile funktionieren eindeutig als eine Programmiereinheit, zusammen sind sie also ein String-Kandidat zum Refactoring in eine separate Methode
  • Keine "Erfindungen", wie das oberflächliche Do-While-Konstrukt, das nur dazu dient, einen überschaubaren Block zur Verfügung zu stellen, und das andere verwirren kann
  • Durch die Verwendung negativer Tests, die dann beendet werden, werden zwei Dinge erreicht:
  • Es werden keine zusätzlichen Blöcke / Klassen / Objekte erstellt, wodurch die Lesbarkeit und Leistung erhalten bleibt (obwohl ein Rahmen für den Methodenaufruf auf den Stapel geschoben wird) - eine vernachlässigbare Auswirkung
Bohemian 31.08.2013 00:02
quelle
-1

Hier könnte eine andere Lösung sein:

%Vor%

Wenn Ihre Materialien verschiedene Bedingungen haben, die Sie überprüfen können, können Sie mit:

verbessern %Vor%     
sp00m 30.08.2013 09:56
quelle

Tags und Links