2010-04-13 9 views
48

मान लें कि आपके पास है:अगर किसी और की संरचना पर टिप्पणी कैसे की जानी चाहिए?

if(condition) { 
    i = 1; 
} else { 
    i = 2; 
} 

और आपको if और else ब्लॉक समझाते हुए टिप्पणियां देने की आवश्यकता है। ऐसा करने का सबसे पठनीय तरीका क्या है ताकि कोई उन्हें पहली नज़र में आसानी से उठा सके?

मैं आमतौर पर ऐसा करता हूं:

//check for condition 
if(condition) { 
    i = 1; 
} else { 
    //condition isn't met 
    i = 2; 
} 

जो मुझे पर्याप्त स्तर पर नहीं मिलता है क्योंकि टिप्पणियां विभिन्न स्तरों पर स्थित होती हैं, इसलिए त्वरित नज़र में आप बस if टिप्पणी उठाएंगे और else टिप्पणी इस तरह दिखेगी कुछ आंतरिक संरचना से संबंधित है।

उन्हें इस तरह रखकर:

if(condition) { 
    //check for condition 
    i = 1; 
} else { 
    //condition isn't met 
    i = 2; 
} 

मेरे लिए अच्छा नहीं लग रहा है क्योंकि ऐसा लगता है कि पूरी संरचना पर टिप्पणी नहीं की गई है (स्थिति बड़ी हो सकती है और कई लाइनें ले सकती है)।

कुछ ऐसा है:

//check for condition 
if(condition) { 
    i = 1; 
//condition isn't met 
} else { 
    i = 2; 
} 

शायद टिप्पणियों के दृष्टिकोण से सबसे अच्छी शैली होगी लेकिन कोड संरचना के रूप में भ्रमित हो जाएगा।

आप ऐसे ब्लॉक कैसे टिप्पणी करते हैं?

पीएस। मैं कोड की दो पंक्तियों को पुनः प्राप्त करने के बारे में नहीं पूछ रहा हूं, केवल कोड शैली और टिप्पणी स्वरूपण के बारे में।

+0

इस पाठ के साथ, प्रश्न कुछ भी तेज़ है :-) –

+2

इस प्रश्न पूछने के लिए धन्यवाद, मैं हमेशा इसके बारे में सोचता हूं। – helpermethod

+0

मुझे लगता है कि इसे फिर से खोला जाना चाहिए - यह कोडिंग शैली के बारे में एक सवाल है, जिसे विशेषज्ञता के आधार पर उत्तर दिया जा सकता है। – Cookie

उत्तर

4

मैं उन विशेष मामलों में बिल्कुल टिप्पणी नहीं करता - टिप्पणियां आपके पहले से स्पष्ट कोड पर कोई मूल्य नहीं जोड़ती हैं। यदि आपके पास वास्तव में जटिल स्थिति है जो पढ़ना मुश्किल है, तो मैं इसे अपने फ़ंक्शन (शायद inline) में फैक्टरिंग करने पर विचार करता हूं।

14

आपको केवल तभी टिप्पणी करनी चाहिए यदि कोड स्वयं व्याख्यात्मक नहीं है। तो अगर आत्म व्याख्यात्मक बनाओ। इस तरह शायद

bool fooIsNotReallyGood = ....; 

if(fooIsNotReallyGood) { 
... 
} else { 
... 
} 
+0

+1 मैं टिप्पणियों के बिना अपना कोड समझने योग्य होने के लिए अपना सर्वश्रेष्ठ प्रयास करता हूं –

+26

धन्यवाद, लेकिन यह सवाल नहीं है। – serg

+0

@ serg555: आप स्पष्ट रूप से इस प्रश्न से नहीं पूछ सकते हैं, लेकिन यह वही जवाब है। यदि आप उपर्युक्त उदाहरणों में वास्तविक टिप्पणियों का उपयोग कर रहे थे, तो यह तुरंत स्पष्ट होगा कि यह पूरी तरह से संबंधित विशिष्ट टिप्पणी पर निर्भर करता है। बाहरी स्तर पर एक वास्तविक टिप्पणी, उदाहरण के लिए, समझा सकती है कि जब आपके पास एक विशेष ग्राफिक्स कार्ड स्थापित होता है तो एक बग उत्पन्न होता है जो अन्यथा कोई समस्या नहीं है, इसलिए आप उस स्थिति के आधार पर चीजें अलग-अलग करते हैं। एक आंतरिक टिप्पणी एक विशेष रूप से जटिल एल्गोरिदम की व्याख्या कर सकती है और यह कथन के उस विशेष शाखा से कैसे जुड़ा हुआ है। –

2

//condition isn't met एक बेकार टिप्पणी प्रतीत होता है। लेकिन इस मामले में जहां इस तरह के एक टिप्पणी की आवश्यकता है में मैं इस तरह (सी #) यह कार्य करें:

//check for condition 
if(condition) 
{ 
    i = 1; 
} 
//some other condition 
else 
{ 
    i = 2; 
} 

हालांकि, ब्लॉक है अगर सिर्फ अगर-बाकी, की तुलना में मैं पहले अगर दोनों टिप्पणियों विलय होगा।

जावास्क्रिप्ट के लिए मैं पसंद करते हैं

//check for condition 
if(condition) { 
    i = 1; 
} else { //some other condition 
    i = 2; 
} 

पी.एस. लगता है के रूप में कई राय के रूप में वहाँ लोग :)

-3

आप तरीकों की if-else कोड निकालने और उन्हें ठीक से नाम हो सकते हैं:

function main() { 
    checkForCondition(condition); 
    conditionIsNotMet(condition); 
} 

function checkForCondition(boolean condition) { 
    if (condition) { 
    i = 1; 
    } 
} 

function conditionIsNotMet(boolean condition) { 
    if (!condition) { 
    i = 2; 
    } 
} 

इस तरह के एक तुच्छ मामला यह एक overkill की तरह लगता है में, लेकिन अधिक होने की कल्पना if-else शाखा प्रति एक पंक्ति से अधिक।

+2

लॉल, इस तरह के मामले में ऐसा कुछ बेहतर नहीं है? यदि (स्थिति) स्थिति आईसमेट(); अन्य conditionIsNotMet(); –

19

एक अन्य विकल्प है:

if(condition) { //check for condition 
    i = 1; 
} else { //condition isn't met 
    i = 2; 
} 
+2

यह विकल्प मुझे पसंद है ... जब तक कि टिप्पणियां वास्तव में लंबी नहीं होतीं, तब तक आप खराब हो जाते हैं ...... मैं निराश हो जाता हूं और टिप्पणियों को हटा देता हूं क्योंकि बदसूरत लगती है। – mpen

+0

+1 मेरी राय में सबसे अच्छा समाधान। – helpermethod

+0

यह वही है जो मैं करता हूं। यदि टिप्पणियां लंबी हैं तो पूरी चीज को समझाते हुए सशर्त के ऊपर एक टिप्पणी ब्लॉक डालें। – drawnonward

1

चर महत्वपूर्ण हैं, नहीं की स्थिति के लिए खुद को।

if condition: # <condition dependent variable> was <predicated> 
    dosomething() 
elif othercondition: # <othercondition dependent variable> <predicated> 
    dootherthing() 
else: # <all variables> <not predicated> 
    doelsething() 
2

इस प्रकार मैं कथन के लिए मेरी टिप्पणियां करता हूं, हालांकि मुझे आमतौर पर यह आवश्यक नहीं लगता है। मैं लाइन में डालने पसंद के साथ करता है, तो/बाकी है, और उसी जगह

आत्म टिप्पणी स्थितियों के लिए
if (condition) //if above the bar 
{ 
    i = 0; 
    k = 1; 
} 
else    //else if below 
{ 
    i = 1; 
    k = 2; 
} 
+0

मुझे चीजों को करने की यह विधि पसंद है। इसमें अधिक जगह लग सकती है लेकिन यह एक लूप/अगर कथन में शामिल है जो इसे बिल्कुल स्पष्ट करता है। – Faken

5

जाओ करने के लिए टैब किए गए, तो कोई अतिरिक्त टिप्पणी आवश्यक नहीं हैं। मान लें कि शर्त यह है कि अधिकतम ऋण मूल्य तक पहुंच गया है। यह हमें देता है:

if (maximumLoanToValueIsReached) 
{ 
    i=1; 
} 
else 
{ 
    i=2; 
} 

जब मैं = 2 कि मूल्य को अधिकतम ऋण के रूप में है कि आत्म explanitory है पहुँच नहीं किया गया है निर्दिष्ट करने के लिए कोई ज़रूरत नहीं। एक तरफ के रूप में, मैं कुछ और अर्थपूर्ण के लिए i का नाम भी बदलूंगा।

20

यदि अन्यथा बयानों पर टिप्पणी करने की आवश्यकता है, तो मैं उस मामले का वर्णन करना पसंद करता हूं जिसने कोड को उस बिंदु तक पहुंचाया। विशेष रूप से एक उच्च cyclomatic जटिलता

if (condition) { 
// User is taking a course at college x: 
    i = 1; 
} else { 
// User is not taking any course at college x: 
    i = 2; 
} 
+0

मुझे यह पसंद है ... विशेष रूप से "अन्य" ब्लॉक में टिप्पणी। आपकी स्थिति स्पष्ट होनी चाहिए, लेकिन कोड की लंबाई और जटिलता (विशेष रूप से घोंसले) के आधार पर, "अन्य" का अर्थ बिल्कुल स्पष्ट नहीं हो सकता है। – mmc

+0

उदाहरण के लिए, यदि आप अन्य ब्लॉक के अंदर 'i = 2' के लिए कुछ टिप्पणी देना चाहते हैं तो यह काम नहीं करेगा। ऐसा लगता है कि उनमें से दोनों 'i = 2' के लिए हैं या दोनों' अन्य 'ब्लॉक के लिए हैं। – aandis

1

कोई एक जवाब है के साथ कोड में - अलग लोगों के है क्या सबसे पठनीय के बारे में अलग राय होगा। हालांकि, मुझे लगता है कि इस बात का एक समझौता है कि टिप्पणियों को वास्तव में (अन्यथा आत्म-स्पष्टीकरण) कोड में मूल्य जोड़ना चाहिए, और टिप्पणी शैली को सुसंगत होना चाहिए।

// If the condition for a local tree imbalance is met, 
    // juggle the immediate nodes to re-establish the balance. 
    // Otherwise, execute a global balancing pass. 
    if (somewhat muddled condition) 
    { 
    ...code... 
    } 
    else // Tree is in local balance 
    { 
    ... more code... 

    } // if/else (tree locally imbalanced) 

अंतिम '}' पर टिप्पणी मुख्य रूप से मौजूद है हालत अधिक विज़ुअल भार के अंत देने के लिए, बनाने के लिए:

तरह से मैं नहीं तुरंत आत्म व्याख्यात्मक स्थितियों के लिए टिप्पणियों को संभालने के इस तरह है स्रोत के माध्यम से पढ़ने के लिए आसान है।

9

कोड पहले से ही आत्म दस्तावेज़ीकृत नहीं है, तो मैं इसे संरचना देंगी:

if (someCondition) { 
    // If some condition, then do stuff 1. 
    doStuff1(); 
} 
else { 
    // Else do stuff 2. 
    doStuff2(); 
} 

लेकिन अगर कोड पहले से ही आत्म दस्तावेज़ीकृत है फिर से, यह बहुत मतलब नहीं है। आप जैसे कुछ जटिल स्थिति के कारण टिप्पणियां जोड़ने के लिए करना चाहते हैं:

if (x == null || x.startsWith("foo") || x.endsWith("bar") || x.equals("baz")) { 
    doStuff1(); 
} 
else { 
    doStuff2(); 
} 

तो मैं के रूप में यह refactor करने के लिए विचार किया जाएगा:

boolean someCondition = (x == null || x.startsWith("foo") || x.endsWith("baz") || x.equals("waa"); 

if (someCondition) { 
    doStuff1(); 
} else { 
    doStuff2(); 
} 

जिसमें चर नाम someConditionवास्तव में में पूरे हालत को सारांशित छिलका। जैसे usernameIsValid, userIsAllowedToLogin या तो।

+0

मैं उसी टैब स्तर पर उपरोक्त टिप्पणी भी पसंद करता हूं। मैं कोड पर टिप्पणी न करने से सहमत नहीं हूं, अगर कथन 'कुछ कंडिशन' के रूप में आसान हो सकता है, लेकिन इसकी संरचना के अंदर 300 लाइनें हैं और इस मामले में अन्य कोई टिप्पणी नहीं कथन बेवकूफ होगी, क्योंकि आपको 300 लाइनों को स्क्रॉल करना होगा और एक और 300 नीचे .. – s3m3n

1

टिप्पणियां बहुत अधिक व्यक्तिगत चीजें हैं, और (जैसा कि कुछ पूर्व उत्तरों द्वारा देखा जा सकता है) कोड के रूप में बहस उत्पन्न करते हैं।

साधारण मामलों में, टिप्पणियां कोड से अलग होती हैं।लेकिन एक और जटिल स्थिति मानते हुए, मैं पसंद करता हूं:

/* 
** Comment explaining what the condition 
** is trying to determine 
*/ 
if (condition) 
{ 
    /* 
    ** Comment explaining the implications 
    ** of the condition being met 
    */ 
    do_something(); 
} 
else 
{ 
    /* 
    ** Comment explaining the implications 
    ** of the condition not being met 
    */ 
    do_something_else(); 
} 

किसी भी मामले में, टिप्पणियों को कोड को दोहराना नहीं चाहिए।

संबंधित मुद्दे