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 ++.
Um die zyklomatische Komplexität zu reduzieren, können Sie die Logiken in Untermethoden aufteilen:
%Vor%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.
>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:
return
sauber verlassen wird.