2017-06-20 3 views
0

Obwohl mein Code funktioniert perfekt wie ich will, aber es gibt viele if-else-Anweisungen in meinem Code, also möchte ich fragen, ist es möglich if-else-Anweisungen in diesem CodeJava: Wie reduziere ich die Anzahl der if-else-Anweisungen, wo sie nicht zusammengeführt werden können

if (nightPost(timePicker1.getValue().toString(), timePicker4.getValue().toString())) { 
    if (!teToTime.isAfter(LocalTime.parse("08:30",format))) { 
     textField4.setStyle(""); 
     if(getDifference(timeKA, timeKB)<121 && getDifference(timeKA, timeKB)>59) { 
      timePicker3.setStyle(""); 
      if (range(timePicker1.getValue().toString(), timePicker2.getValue().toString(), 
       timePicker3.getValue().toString(), timePicker4.getValue().toString())) { 
       timePicker2.setStyle(""); 
       timePicker3.setStyle(""); 
       if(increaseTxt.isBefore(LocalTime.parse("11:01",format))) 
       { 
        textField5.setStyle(""); 
        return true; 
       } else { 
        textField5.setStyle("-fx-border-color: red"); 
        return false; 
       } 
      } else { 
       timePicker2.setStyle("-fx-border-color: orange"); 
       return false; 
      }        
     } 
     else { 
      timePicker3.setStyle("-fx-border-color: red"); 
      return false; 
     } 
    } else { 
     textField4.setStyle("-fx-border-color: red"); 
     return false; 
    } 
} 
return false; 
+2

Ich glaube, Sie dies auf codeReview.stackexchange fragen sollte ... – ItamarG3

+0

Ich verstehe nicht wirklich, was Ihr Code tut, aber hier sind einige allgemeine Hinweise: fail früh, vielleicht Schalter/Fall oder eine Karte verwenden (zum Beispiel für die Farben), ternärer Operator, holen Sie zuerst Informationen, ... – domsson

+1

Mein Rat ist nicht, Englisch und eine andere Sprache während des gesamten Codes zu mischen. Es könnte der erste Schritt zur Verbesserung sein. Dies wird helfen, Ihre Logik zu verstehen. –

Antwort

3

ersetzen Nested Conditional mit Guard Clauses

if (!nightPost(timePicker1.getValue().toString(), timePicker4.getValue().toString())) { 
    return false; 
} 
if (teToTime.isAfter(LocalTime.parse("08:30",format))) { 
    textField4.setStyle("-fx-border-color: red"); 
    return false; 
} 
textField4.setStyle(""); 
if (!(getDifference(timeKA, timeKB) < 121 && getDifference(timeKA, timeKB) > 59)) { 
    timePicker3.setStyle("-fx-border-color: red"); 
    return false; 
} 
timePicker3.setStyle(""); 
if (!range(timePicker1.getValue().toString(), timePicker2.getValue().toString(), 
      timePicker3.getValue().toString(), timePicker4.getValue().toString())) 
{ 
    timePicker2.setStyle("-fx-border-color: orange"); 
    return false; 
} 
timePicker2.setStyle(""); 
timePicker3.setStyle(""); 
if (!increaseTxt.isBefore(LocalTime.parse("11:01",format))) { 
    textField5.setStyle("-fx-border-color: red"); 
    return false; 
} 
textField5.setStyle(""); 
return true; 
+0

Danke für den Begriff "Guard Clauses"! Ich habe nie den richtigen Begriff gekannt; In meinem obigen Kommentar habe ich es als "fail early" bezeichnet. – domsson

+1

Bitte posten Sie nicht einfach einen Link mit der Beschreibung. Diese Verbindung kann sterben, Ihre Antwort als obsolet reedernd. Siehe [Antwort] über den Link in den Antworten. – AxelH

-1

ich bin nicht ganz sicher zu reduzieren, was Ihr Code tut, aber nach einem kurzen Blick über (und als @matoni hat gezeigt), du könntest tatsächlich viel von deinem 'sonst' entfernen s, da du in den meisten "echten" Fällen zurückkehrst. Ob das etwas lesbarer ist, ist subjektiv.

Auch wie @Matoni gezeigt hat, können Sie viele Ihrer If-Anweisungen mit invertieren! auf diese Weise können Sie die Verschachtelung wirklich reduzieren.

Edit: Hatte einen Blick über meine Antwort und den Code jetzt, dass ich wieder zu Hause bin. Entschuldigung @AxelH, es scheint, als hätte ich Matonis Antwort missverstanden. Hier ist eine aktualisierte Antwort:

Ich habe die If invertiert und entfernt Elses wie bereits erwähnt, aber ich habe auch einige der Code in seine eigenen privaten Methoden für eine bessere Lesbarkeit verschoben, da ich davon ausgehen, warum Sie wollten umgestalten.

public bool yourMethod(your params){ 

    if (!nightPost(timePicker1.getValue().toString(), timePicker4.getValue().toString())) return false; 

    if (teToTime.isAfter(LocalTime.parse("08:30",format ||))) return redBorder(); 
    textField4.setStyle(""); 

    if(!(getDifference(timeKA, timeKB)<121 && getDifference(timeKA, timeKB)>59)) return redTimeBorder(); 
    timePicker3.setStyle(""); 

    // assuming range returns a boolean value 
    if (!range(timePicker1.getValue().toString(), timePicker2.getValue().toString(), 
    timePicker3.getValue().toString(), timePicker4.getValue().toString())) return orangeTime2Border(); 

    timePicker2.setStyle(""); 
    timePicker3.setStyle(""); 

    if(!increaseTxt.isBefore(LocalTime.parse("11:01",format))) return redText5Border(); 

    textField5.setStyle(""); 
    return true; 
}        

private boolean redText4Border(){ 
    textField4.setStyle("-fx-border-color: red"); 
    return false; 
} 

private boolean redTime3Border(){ 
    timePicker3.setStyle("-fx-border-color: red"); 
    return false; 
} 

private boolean orangeTime2Border(){ 
    timePicker2.setStyle("-fx-border-color: orange"); 
    return false; 
} 

private boolean redText5Border(){ 
    textField5.setStyle("-fx-border-color: red"); 
    return false; 
} 
+0

Diese Antwort ist nicht notwendig und liefert nichts mehr als die Antwort von _matoni_. Sie können die Antwort kommentieren, um Inhalte hinzuzufügen. – AxelH

+0

Die Antwort von matoni konzentrierte sich auf Schutzklauseln, während sich meine auf das Invertieren von Ifs und das Entfernen von Elen konzentriert. Also ja, meine Antwort trägt dazu bei. Wenn nötig, füge ich etwas mehr hinzu, um es klarzustellen. –

+0

Wenn Sie die Bedingung zurücksetzen, um das 'return' in' ifs' zu haben und den 'else' Teil (und die Verschachtelung) entfernen zu können, erstellen Sie ganz klar das exakte Muster, außer dass _matoni_ dieser Lösung einen Namen gibt. Also bitte, fügen Sie mehr hinzu, damit ich sehen kann, wo es auseinandergeht. – AxelH

Verwandte Themen