İşte çok basitleştirilmiş bir örnek . Bu mutlaka dile özgü bir soru değildir ve işlevin yazılabileceği diğer birçok yolu ve bu konuda yapılabilecek değişiklikleri göz ardı etmenizi rica ediyorum. . Renk benzersiz tiptedir
string CanLeaveWithoutUmbrella()
{
if(sky.Color.Equals(Color.Blue))
{
return "Yes you can";
}
else
{
return "No you can't";
}
}
Bir çok insanla tanıştım, ReSharper ve bu adam (yorumu bana bir süredir sormak istediğimi hatırlattı) elsebu bırakarak bloğu kaldırmak için kodu yeniden düzenlemenizi tavsiye ediyor:
(Çoğunluğun söylediklerini hatırlayamıyorum, bunu başka türlü sormamış olabilirim)
string CanLeaveWithoutUmbrella()
{
if(sky.Color.Equals(Color.Blue))
{
return "Yes you can";
}
return "No you can't";
}
Soru:else Bloğu dahil etmeyerek karmaşıklıkta bir artış var mı ?
Her elseiki bloktaki kodun doğrudan ilişkili olduğu gerçeğini belirterek , daha doğrudan devlet niyetinin izlenimi altındayım .
Buna ek olarak, özellikle sonraki bir tarihte kodlama değişikliklerinden sonra mantıktaki ince hataları önleyebileceğimi görüyorum.
Benim sadeleştirilmiş örneğimin bu varyasyonunu al ( orBu bilerek basitleştirilmiş bir örnek olduğu için operatörün gerçeğini yok saymak ):
bool CanLeaveWithoutUmbrella()
{
if(sky.Color != Color.Blue)
{
return false;
}
return true;
}
Birisi if, ilk koşuldan hemen sonra ilk koşulun kendi durumuna bir kısıtlama koymasını hemen bilmeden bir koşula dayalı yeni bir blok ekleyebilir .
Bir elseblok mevcut olsaydı, yeni koşulu ekleyen kişi, elsebloğun içeriğini taşımaya zorlanırdı (ve bir şekilde üzerinde parlarlarsa sezgisel tarama, kodun erişilemez olduğunu gösterir, biri diğerini ifkısıtlıyorsa) .
Elbette, spesifik örneğin yine de tanımlanması gereken başka yollar da vardır, hepsi bu durumu önler, ancak bu sadece bir örnektir.
Verdiğim örneğin uzunluğu bunun görsel yönünü çarpıtabilir, bu nedenle parantez içine alınan alanın, yöntemin geri kalan kısmı için nispeten önemsiz olduğunu varsayalım.
Başka bir bloğun atlanmasına katıldığım bir durumdan bahsetmeyi unuttum ve bir ifblok kullanırken null-check (veya başka herhangi bir koruma) gibi aşağıdaki tüm kodlar için mantıksal olarak tatmin edilmesi gereken bir kısıtlama uygulamak için kullanıyorum. .
elsemaddeyi yazarken daha okunabilir olabileceğini kabul ediyorum (benim zevkime göre, gereksiz parantezleri terk ederken daha da okunabilir olacaktır. Ama bence örnek iyi seçilmiş değil, çünkü Yukarıdaki durum return sky.Color == Color.Blue(eğer / else olmadan) yazardım Bool'dan farklı bir dönüş türüne sahip bir örnek muhtemelen bunu daha açık hale getirecektir
