Ruby: verschachtelte if-Anweisungen
War ich ein wenig code schreiben, und es endete als viel zu hässlich für meinen Geschmack. Gibt es trotzdem, ich kann es umgestalten, so dass ich don ' T verwenden Sie verschachtelte if-Anweisungen?
def hours_occupied(date)
#assuming date is a valid date object
availability = get_work_hours(date)
focus = "work"
if availability.nil
availability = get_family_hours(date)
focus = "family"
if availability.nil
availability = get_friend_hours(date)
focus = "friends"
end
end
end
Ich weiß, ich werde in der Lage sein, etwas zu tun, wie dies für die Verfügbarkeit
availability = get_work_hours(date) || get_family_hours(date) || get_friend_hours(date)
aber wie kann ich die Fokus-variable entsprechend?
- Können wir annehmen, dass Sie nicht zeigen, die komplette Methode? ansonsten macht es keinen Sinn zu ordnen diesen ungenutzten Variablen. Wenn das der Fall ist, fügen Sie "..." als Platzhalter an der Unterseite der Methode.
- Finde ich mich völlig unfähig zu understande das Thema und den Zweck seines code, das macht mich unfähig zu reagieren.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eine weitere Möglichkeit ist, nur Werte zuweisen, wenn es notwendig ist:
oder über einen iterator:
Ich würde etwas tun, wie die folgenden es, macht deutlich, dass jeder Fall ist gegenseitig:
focus
3 malIch würde schreiben:
Aber ich bin nicht sicher, mit verschiedenen Methoden für die verschiedenen Typen ist eine gute Idee, es macht den code schwerer zu schreiben. Ein anderes Konzept mit Enumerable#map_detect:
Einen Fall, wenn ist auch eine option:
case
anders funktioniert als ich dachte 🙂availability
muss die erste nicht-null Ergebnis, der die Methode aufruft, es ist vorher nicht bekannt.case
, nichtcase availability
availability
ist nicht bekannt! oder bin ich etwas fehlt?case
ohne parameter:focus = case when get_work_hours...
when
, so ist es nicht absolut gleichwertig zu einer if-Kette?