Diğer tüm cevaplar öğretim elemanınızın kuralını savunur 3.
Size katıldığımı söyleyeyim: kural gereksiz ve bunu tavsiye etmem. Her zaman kıvırcık parantez eklerseniz teorik olarak hataları önlediği doğrudur . Öte yandan, gerçek hayatta bu problemle hiç karşılaşmadım : diğer cevapların ima ettiği aksine, bir kez gerekli olduklarında kıvırcık parantezleri eklemeyi unutmadım. Doğru girinti kullanırsanız, birden fazla ifade girintilendikten sonra süslü parantez eklemeniz gerektiği hemen anlaşılır.
“Bileşen 10” un cevabı aslında bunun gerçekten bir hataya yol açabileceği akla gelebilecek tek durumu vurgulamaktadır. Ancak öte yandan, kodun düzenli ifadeyle değiştirilmesi her zaman büyük bir özen gerektirir.
Şimdi madalyanın diğer tarafına bakalım: her zaman kıvırcık parantez kullanmanın bir dezavantajı var mı? Diğer cevaplar bu noktayı görmezden geliyor. Ama olan bir dezavantaj: dikey ekran çok yer kaplıyor ve bu size gerekenden daha fazla kaydırmak zorunda anlamına gelir çünkü bu da sizin kod okunamaz yapabilirsiniz.
Başlangıçta çok sayıda güvenlik yan tümcesine sahip bir işlevi düşünün (ve evet, aşağıdaki kötü C ++ kodu ancak diğer dillerde bu oldukça yaygın bir durum olacaktır):
void some_method(obj* a, obj* b)
{
if (a == nullptr)
{
throw null_ptr_error("a");
}
if (b == nullptr)
{
throw null_ptr_error("b");
}
if (a == b)
{
throw logic_error("Cannot do method on identical objects");
}
if (not a->precondition_met())
{
throw logic_error("Precondition for a not met");
}
a->do_something_with(b);
}
Bu korkunç bir kod ve aşağıdakilerin büyük ölçüde daha okunabilir olduğunu şiddetle savunuyorum:
void some_method(obj* a, obj* b)
{
if (a == nullptr)
throw null_ptr_error("a");
if (b == nullptr)
throw null_ptr_error("b");
if (a == b)
throw logic_error("Cannot do method on identical objects");
if (not a->precondition_met())
throw logic_error("Precondition for a not met");
a->do_something_with(b);
}
Benzer şekilde, kısa iç içe döngüler kıvırcık parantezleri atlamaktan faydalanır:
matrix operator +(matrix const& a, matrix const& b) {
matrix c(a.w(), a.h());
for (auto i = 0; i < a.w(); ++i)
for (auto j = 0; j < a.h(); ++j)
c(i, j) = a(i, j) + b(i, j);
return c;
}
İle karşılaştırmak:
matrix operator +(matrix const& a, matrix const& b) {
matrix c(a.w(), a.h());
for (auto i = 0; i < a.w(); ++i)
{
for (auto j = 0; j < a.h(); ++j)
{
c(i, j) = a(i, j) + b(i, j);
}
}
return c;
}
İlk kod özlüdür; ikinci kod şişirilir.
Ve evet, bu , açılış çizgisini bir önceki hatta koyarak bir dereceye kadar hafifletilebilir . Ama bu olurdu hala herhangi kıvırcık parantez olmadan kod daha az okunabilir.
Kısacası: ekran alanı kaplayan gereksiz kod yazmayın.