अन्य सभी उत्तर आपके व्याख्याता के नियम 3 का बचाव करते हैं।
मैं कहता हूं कि मैं आपसे सहमत हूं: नियम निरर्थक है और मैं इसकी सलाह नहीं दूंगा। यह सच है कि यह सैद्धांतिक रूप से त्रुटियों को रोकता है यदि आप हमेशा घुंघराले कोष्ठक जोड़ते हैं। दूसरी ओर, मैंने वास्तविक जीवन में इस समस्या का कभी सामना नहीं किया है : अन्य उत्तरों के विपरीत, मैं एक बार आवश्यक हो जाने के बाद एक बार घुंघराले कोष्ठक जोड़ना नहीं भूलता। यदि आप उचित इंडेंटेशन का उपयोग करते हैं, तो यह तुरंत स्पष्ट हो जाता है कि एक बार एक से अधिक स्टेटमेंट इंडेंट होने पर आपको घुंघराले कोष्ठक जोड़ने की आवश्यकता है।
"घटक 10" का जवाब वास्तव में एकमात्र अनुमान योग्य मामले को उजागर करता है जहां यह वास्तव में त्रुटि पैदा कर सकता है। लेकिन दूसरी ओर, नियमित अभिव्यक्ति के माध्यम से कोड की जगह हमेशा किसी भी तरह से भारी देखभाल का वारंट करती है।
अब आइए पदक के दूसरे पक्ष को देखें: क्या हमेशा घुंघराले कोष्ठक का उपयोग करने का नुकसान है? अन्य उत्तर बस इस बिंदु को अनदेखा करते हैं। लेकिन वहाँ है एक नुकसान: यह ऊर्ध्वाधर स्क्रीन स्थान का एक बहुत लेता है, और यह बदले में अपने कोड अपठनीय हो सकता है क्योंकि यह मतलब है कि आप आवश्यकता से अधिक स्क्रॉल करना पड़ता है।
शुरुआत में बहुत सारे गार्ड क्लॉस के साथ एक फ़ंक्शन पर विचार करें (और हाँ, निम्नलिखित खराब C ++ कोड है लेकिन अन्य भाषाओं में यह काफी सामान्य स्थिति होगी):
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);
}
यह भयानक कोड है, और मैं दृढ़ता से तर्क देता हूं कि निम्नलिखित बहुत अधिक पठनीय है:
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);
}
इसी तरह, छोटे नेस्टेड छोरों को घुंघराले कोष्ठक को छोड़ने से लाभ होता है:
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;
}
तुलना करना:
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;
}
पहला कोड संक्षिप्त है; दूसरा कोड फूला हुआ है।
और हां, पिछली लाइन पर शुरुआती ब्रेस लगाकर इसे कुछ हद तक कम किया जा सकता है । लेकिन वह फिर भी बिना किसी कर्ली कोष्ठक के कोड से कम पठनीय होगा ।
संक्षेप में: अनावश्यक कोड न लिखें जो स्क्रीन स्पेस लेता है।