Я думаю, що в Прикладі 2 є багато підводних каменів, які вниз можуть призвести до ненавмисного коду. Перший фокус тут базується на логіці, що оточує змінну 'myString'. Тому , щоб бути явними, всі випробування умов повинні відбуватися в блоці обліку коду для відомої і по замовчуванням / невідома логіки.
Що робити, якщо пізніше код був ненавмисно введений у приклад 2, який істотно змінив вихід:
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
блоком відразу після перевірки на нуль зробили б програмісти, які додали удосконалення до майбутніх версій, додають всю логіку разом, тому що тепер у нас є рядок логіки, який не був призначений для початкового правила (повертається, якщо значення є нуль).
Я дуже позичаю в цьому в деяких керівних принципах C # щодо Codeplex (посилання на це тут: http://csharpguidelines.codeplex.com/ ), де зазначено наступне:
"Додайте описовий коментар, якщо блок за замовчуванням (інакше) повинен бути порожнім. Більше того, якщо цей блок не повинен бути досягнутий, киньте InvalidOperationException для виявлення майбутніх змін, які можуть потрапити через існуючі випадки. Це забезпечує кращий код, оскільки усі шляхи, про які може пройти кодекс, були продумані. "
Я думаю, що добре використовувати програмування таких блоків, щоб завжди було додано блок за замовчуванням (якщо інше, випадок: за замовчуванням) для явного обліку всіх шляхів коду і не залишати код відкритим для непередбачуваних логічних наслідків.