Ich denke, es gibt eine Menge Fallstricke bei Beispiel 2, die später zu unbeabsichtigtem Code führen könnten. Zunächst einmal basiert der Fokus hier auf der Logik, die die Variable 'myString' umgibt. Aus diesem Grund sollten alle Tests von Bedingungen explizit in einem Codeblock durchgeführt werden, der bekannte und Standard- / unbekannte Logik berücksichtigt .
Was passiert, wenn später ungewollt Code in Beispiel 2 eingefügt wird, der die Ausgabe erheblich verändert hat?
if (myString == null)
{
return false;
}
//add some v1 update code here...
myString = "And the winner is: ";
//add some v2 update code here...
//buried in v2 updates the following line was added
myString = null;
//add some v3 update code here...
//Well technically this should not be hit because myString = null
//but we already passed that logic
myString = "Name " + myString;
// Do something more here...
return true;
Ich denke, mit dem else
Block, der unmittelbar auf die Überprüfung auf eine Null folgt, hätten Programmierer, die die Erweiterungen für die zukünftigen Versionen hinzugefügt haben, die gesamte Logik zusammenaddiert, da wir jetzt eine Folge von Logik haben, die für die ursprüngliche Regel nicht beabsichtigt war (Rückgabe, wenn der Wert ist) Null).
Ich bin fest davon überzeugt, dass einige der C # -Richtlinien zu Codeplex (Link dazu hier: http://csharpguidelines.codeplex.com/ ) Folgendes enthalten:
Msgstr "" "Fügen Sie einen beschreibenden Kommentar hinzu, wenn der Standardblock (else) leer sein soll. Wenn dieser Block nicht erreicht werden soll, lösen Sie eine InvalidOperationException aus, um zukünftige Änderungen zu erkennen, die durch die vorhandenen Fälle fallen könnten. Dies sorgt für besseren Code, weil Über alle Pfade, die der Code zurücklegen kann, wurde nachgedacht. "
Ich halte es für eine gute Programmierpraxis, bei Verwendung von Logikblöcken wie diesem immer einen Standardblock hinzuzufügen (if-else, case: default), um alle Codepfade explizit zu berücksichtigen und den Code keinen unbeabsichtigten logischen Konsequenzen auszusetzen.