Reflektieren verschachtelte IF-Anweisung für Klarheit [geschlossen]

8

Ich möchte diesen Hokuspokus einer Methode umgestalten, um ihn lesbarer zu machen, er hat viel zu viele verschachtelte IFs für mich.

Wie würdest du das umgestalten?

%Vor%     
Blankman 10.12.2008, 14:00
quelle

9 Antworten

23

Ich würde die Bedingungen in dem Test zu umkehren, wenn schlecht, dann deleteAndLog als das Beispiel unten. Dies verhindert das Verschachteln und bringt die Aktion in die Nähe des Tests.

%Vor%     
David Waters 10.12.2008, 14:06
quelle
9

Schutzklauseln.

Für jede Bedingung, negiere sie, ändere den Else-Block in den then-Block und kehre zurück.

Also

%Vor%

Wird:

%Vor%     
jamesh 10.12.2008 14:09
quelle
2

Wenn Sie keine Ausnahmen verwenden möchten, können Sie die Prüfungen ohne Verschachtelung durchführen.

Warnung, Luftverkehr voraus:

%Vor%     
Tomalak 10.12.2008 14:22
quelle
1

Ein möglicher Ansatz besteht darin, einzelne if-Anweisungen zu verwenden, die nach einer Bedingung suchen, die nicht zutrifft. Haben Sie eine Rückkehr für jede dieser Prüfungen. Dies verwandelt Ihre Methode in eine Sequenz von 'if' Blöcken anstelle von einem Nest.

    
Jordan Parmer 10.12.2008 14:05
quelle
1

Hier gibt es nicht viel nachzubessern, da Sie die drei Tests separat halten, da die Fehlermeldungen sich auf den durchgeführten Test beziehen. Sie können sich dafür entscheiden, dass die Testmethoden den Fehler zur Protokollierung zurückmelden, damit Sie sie nicht in der if / else-Struktur haben, was die Dinge einfacher machen könnte, da Sie dann einfach auf einen Fehler testen und die Datei löschen und löschen können .

    
Frans Bouma 10.12.2008 14:07
quelle
1

In David Waters Antwort gefällt mir das wiederholte DeleteFile LogError-Muster nicht. Ich würde entweder eine Hilfsmethode namens DeleteFileAndLog (String-Datei, String-Fehler) schreiben oder ich würde den Code wie folgt schreiben:

%Vor%     
plinth 10.12.2008 14:53
quelle
0

Es sind die oben genannten Elemente, die mein Auge werfen. Hier ist eine Alternative, innerhalb des try {}

Sie können dies noch kürzer machen, indem Sie nach MoveToSafeFolder zurückkehren (Auch wenn Sie den finally-Block zurückgeben, wird er ausgeführt.) Dann müssen Sie keine leere Zeichenfolge zu errorMessage zuweisen, und Sie müssen dies nicht überprüfen ist errorString leer, bevor die Datei gelöscht und die Nachricht protokolliert wird). Ich habe es hier nicht gemacht, weil viele frühe Offensive finden, und ich würde in diesem Fall zustimmen, da die Ausführung des finally-Blocks nach der Rückkehr für viele Leute nicht intuitiv ist.

Hoffe, das hilft

%Vor%     
Binary Worrier 10.12.2008 14:25
quelle
0

Ich würde so etwas machen:

%Vor%     
Stefan 10.12.2008 14:53
quelle
0

Wie wäre es damit?

%Vor%

oder, noch besser, ... das:

%Vor%

HINWEIS: Sie sollten generische Exception nicht fangen und verschlucken, ohne sie erneut auszulösen ...

    
Charles Bretana 10.12.2008 15:40
quelle

Tags und Links