İş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ı) else
bu 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 else
iki 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 ( or
Bu 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 else
blok mevcut olsaydı, yeni koşulu ekleyen kişi, else
bloğ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 if
kı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 if
blok 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. .
else
maddeyi 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