Yolda istenmeyen kodlara yol açabileceğini, Örnek 2 için birçok tuzaklar olduğunu düşünüyorum. Buradaki ilk odak noktası 'myString' değişkenini çevreleyen mantığa dayanıyor. Bu nedenle açık olmak gerekirse, tüm koşulların sınanması bilinen ve varsayılan / bilinmeyen mantık için bir kod bloğunda yapılmalıdır .
Ya daha sonra kod istemeden yanlışlıkla çıktıyı değiştiren örnek 2'ye tanıtıldıysa:
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;
else
Null kontrolünün hemen ardından gelen bloğun gelecekteki sürümlere geliştirmeleri ekleyen programcıları tüm mantığı bir araya getirdiğini düşünüyorum çünkü şimdi orijinal kural için istenmeyen bir mantık dizesi var (eğer değer ise boş).
Bu konudaki inancımı, aşağıdakileri ifade eden Codeplex'teki C # kılavuzlarının bazılarına (buradaki bağlantıya: http://csharpguidelines.codeplex.com/ ) borç verdim :
"Varsayılan bloğun (başka) boş olması gerekiyorsa açıklayıcı bir yorum ekleyin. Ayrıca, bu bloğa ulaşılmaması gerekiyorsa, mevcut durumlardan kaynaklanabilecek gelecekteki değişiklikleri tespit etmek için bir InvalidOperationException atın. Bu, daha iyi bir kod sağlar, çünkü "Kodun gidebileceği tüm yollar düşünülmüş."
Bunun gibi mantık blokları kullanırken, her zaman açıkça tüm kod yollarını açık bir şekilde hesaba katan ve kodu istenmeyen mantık sonuçlarına açık bırakmamak için varsayılan bir bloğun eklenmiş olması iyi bir programlama uygulamasıdır.