मैंने विकिपीडिया लेख इंडेंट स्टाइल्स पर पढ़ा है , लेकिन मुझे अभी भी समझ नहीं आया है। K & R और 1TBS में क्या अंतर है?
मैंने विकिपीडिया लेख इंडेंट स्टाइल्स पर पढ़ा है , लेकिन मुझे अभी भी समझ नहीं आया है। K & R और 1TBS में क्या अंतर है?
जवाबों:
कश्मीर एंड आर और एक सच्चे ब्रेस शैली (1TBS) के बीच सबसे बड़ा अंतर यह है कि 1TBS में, सभी है if
, else
, while
, और for
भले ही वे आवश्यक नहीं हैं, बयान उद्घाटन और समापन ब्रेसिज़ है। उद्देश्य यह है कि नए बयानों को सम्मिलित करना आसान है और यह जानना कि वे कैसे समूहीकृत होंगे।
उदहारण के लिए:
कश्मीर एंड आर:
int i;
for (i = 0; i < 10; i++)
printf("Hi.");
1TBS:
int i;
for (i = 0; i < 10; i++) {
printf("Hi");
}
K & R इस तरह है:
if (x)
a();
else {
b();
c();
}
वह है: ब्रेसिज़ का उपयोग केवल जहां आवश्यक हो, स्टेटमेंट को नियंत्रित करने, अपनी लाइन पर ब्रेस को बंद करने के रूप में एक ही लाइन पर ब्रेस खोलना।
"एक सही ब्रेस स्टाइल" (1TBS या OTBS) एक एकल नियंत्रित कथन को एक संक्षिप्त विवरण में ब्रेसिज़ में संलग्न करके बदल देता है:
if (x) {
a();
} else {
b();
c();
}
ऑलमैन शैली 1TBS से थोड़ा आगे निकल जाती है, और ऊर्ध्वाधर ब्रेस को एक लाइन पर अपने आप ही खोलकर खड़ी रिक्ति को मजबूर करती है:
if (x)
{
a();
}
else
{
b();
c();
}
संपादित करें:
मैं अभी भी यह पता लगाने की कोशिश कर रहा हूं कि यह "अभिमानी" के रूप में कैसे योग्य है "कहने के लिए" डेनिस रिची एक बेहद चतुर व्यक्ति था जिसने न केवल एक अच्छी भाषा का आविष्कार किया, बल्कि इसके लिए वास्तव में एक अच्छा ब्रेस स्टाइल भी आया। "
जो लोग जोर देकर कहते हैं कि यह किसी भी तरह से अभिमानी है, यहां थोड़ी चुनौती है: सोर्सफोर्ज, जीथब (आदि) पर जाएं और कश्मीर एंड आर ब्रेस शैली का उपयोग करके परियोजनाएं चुनें। बग और कमिट के उनके रिकॉर्ड के माध्यम से जाओ, और एक एकल बग को खोजने का प्रयास करें जो उनके द्वारा उपयोग किए गए ब्रेस स्टाइल के कारण हुआ था।
यदि आप उतना काम नहीं करना चाहते हैं, तो एक साधारण सांख्यिकीय विश्लेषण करने का प्रयास करें। विभिन्न ब्रेस शैलियों का उपयोग करने वाली परियोजनाओं की तुलना करें, और देखें कि क्या आप "बिमोडैलिटी" दिखा सकते हैं - बग मायने रखता है (गंभीरता, आदि) का एक सांख्यिकीय महत्वपूर्ण अंतर जो ब्रेसिंग शैली के साथ संबंधित है।
मैंने इन दोनों को कुछ साल पहले किया था, और एक भी बग नहीं पाया जो कि मैं ब्रेसिंग शैलियों को विशेषता दे सकता था, और न ही मैं दोनों के बीच सांख्यिकीय रूप से महत्वपूर्ण सहसंबंध तक पहुंचने के लिए कुछ भी पा सकता था। औसत पर, कश्मीर एंड आर ब्रेसिंग का उपयोग करने वालों से थोड़ा कम कीड़े था, लेकिन अंतर था ज्यादा भी अर्हता प्राप्त करने के रूप में सांख्यिकीय रूप से महत्वपूर्ण छोटे।
चूंकि इसे लाया गया था, मैं मल्टी-स्टेटमेंट मैक्रोज़ के साथ स्थिति पर टिप्पणी करूंगा। एक मैक्रो जिसमें कई स्टेटमेंट शामिल हैं, लेकिन उन्हें ब्रेसिज़ के साथ खुद को घेरना नहीं है, एक बग है। मेरा काम उस बग को कवर करने वाले कोड को लिखना नहीं है। इसके विपरीत, मेरा काम उस बग को जल्द से जल्द ढूंढना और मिटाना है।
इसकी बग को ढंकने की उम्मीद में कोड लिखना ताकि वे अनजाने बने रहें और अन-फिक्स्ड सर्वथा गलत हो। अगर आपको पसंद है तो उस अभिमानी को बुलाओ, लेकिन मैं इसे बातचीत के करीब भी नहीं देखता। बग्स को ढंका जाना चाहिए और तय नहीं किया जाना चाहिए। अब मौजूद है, और अधिक संभावना है कि वे तय करने के लिए बहुत अधिक कठिन और महंगे हो जाएंगे।
if
इसके बाद इंडेंट किए गए स्टेटमेंट के साथ एक स्टेटमेंट होता है, इस प्रकार यह प्रदर्शित होता है कि वे दोनों सशर्त निष्पादित हैं। लेकिन कोई ब्रेसिज़ नहीं हैं! दूसरा कथन वास्तव में परे है if
और हमेशा निष्पादित किया जाएगा, इस प्रकार बग।
केआर ब्रेस शैली के साथ सामान्य रूप से समस्या, कोड रीफैक्टरिंग में है। जब चारों ओर चलते हुए कोड को यह याद रखना आसान होता है कि किसी चीज के आस-पास कोई ब्रेसिज़ नहीं हैं, तो इसे गलत तरीके से स्थानांतरित करें (या इसके तहत कुछ सोचकर इसे सशर्त निष्पादित किया जाए) और फिर या तो अपना सिर खरोंच कर दें जब कुछ काम नहीं करता है, या दुर्भाग्यपूर्ण हो सकता है और अंदर हो सकता है एक कोड क्षेत्र का अच्छी तरह से परीक्षण नहीं किया गया है और बग तब तक किसी का ध्यान नहीं जाता है जब तक कि एक काली टोपी उसके शोषण का तरीका नहीं ढूंढती है। डिबगर में एक त्वरित यात्रा आसानी से समस्या को पाती है यदि आप इसे नोटिस करते हैं, लेकिन यदि आप नहीं ...