Hier ist ein sehr vereinfachtes Beispiel . Dies ist nicht unbedingt eine sprachspezifische Frage, und ich fordere Sie auf, die vielen anderen Möglichkeiten zu ignorieren, mit denen die Funktion geschrieben werden kann, sowie die Änderungen, die daran vorgenommen werden können. . Die Farbe ist einzigartig
string CanLeaveWithoutUmbrella()
{
if(sky.Color.Equals(Color.Blue))
{
return "Yes you can";
}
else
{
return "No you can't";
}
}
Eine Menge Leute, die ich getroffen habe, ReSharper, und dieser Typ (dessen Kommentar mich daran erinnerte, dass ich das schon seit einiger Zeit fragen wollte) würden empfehlen, den Code umzugestalten, um den folgenden else
Block zu entfernen :
(Ich kann mich nicht erinnern, was die Mehrheit gesagt hat, ich hätte das vielleicht nicht anders gefragt.)
string CanLeaveWithoutUmbrella()
{
if(sky.Color.Equals(Color.Blue))
{
return "Yes you can";
}
return "No you can't";
}
Frage: Wird die Komplexität erhöht, wenn der else
Block nicht berücksichtigt wird?
Ich habe den Eindruck else
, dass der Code in beiden Blöcken direkt verwandt ist.
Außerdem finde ich, dass ich subtile Fehler in der Logik verhindern kann, insbesondere nach späteren Änderungen am Code.
Nehmen Sie diese Variante meines vereinfachten Beispiels (ignorieren Sie die Tatsache, dass der or
Operator ein absichtlich vereinfachtes Beispiel ist):
bool CanLeaveWithoutUmbrella()
{
if(sky.Color != Color.Blue)
{
return false;
}
return true;
}
Jemand kann jetzt einen neuen if
Block basierend auf einer Bedingung nach dem ersten Beispiel hinzufügen, ohne sofort richtig zu erkennen, dass die erste Bedingung eine Einschränkung für seine eigene Bedingung darstellt.
Wenn ein else
Block vorhanden war, wer auch immer die neue Bedingung , den Inhalt des bewegen zu gehen gezwungen sein würde , hinzugefügt else
Blockes (und wenn sie irgendwie beschönigen es Heuristik zeigt der Code nicht erreichbar ist, die es nicht im Fall einer tut if
beschränke andere) .
Natürlich gibt es auch andere Möglichkeiten, wie das spezifische Beispiel definiert werden sollte. All dies verhindert diese Situation, aber es ist nur ein Beispiel.
Die Länge des von mir angegebenen Beispiels kann den visuellen Aspekt verzerren. Nehmen wir also an, dass der Platz, der bis zu den Klammern beansprucht wird, für den Rest der Methode relativ unbedeutend ist.
Ich habe vergessen , einen Fall zu erwähnen , in dem ich mit dem Weglassen eines anderen Block einverstanden sind , und wird bei Verwendung eines if
Block eine Einschränkung anzuwenden, müssen logisch für erfüllt alle folgenden Code, wie eine Null-Prüfung (oder andere Wachen) .
else
Klausel besser lesbar ist (nach meinem Geschmack ist er sogar noch besser lesbar, wenn die nicht benötigten Klammern weggelassen werden. Aber ich denke, das Beispiel ist nicht gut gewählt, weil in der In dem obigen Fall würde ich schreiben return sky.Color == Color.Blue
(ohne if / else). Ein Beispiel mit einem anderen Rückgabetyp als bool würde dies wahrscheinlich klarer machen.