2011-03-29 15 views
8

महत्वपूर्ण नोट: यह प्रश्न किसी अन्य के ऊपर एक ब्रासिंग शैली की श्रेष्ठता के बारे में नहीं है। मैं वर्तमान में अपने लिए मूल्यांकन करने के लिए शैलियों को बदल रहा हूं, जो मुझे लगता है कि मेरी स्थिति में सबसे अच्छा काम करता है, और मुझे एल्मैन को 1TBS जितना पसंद है।1TBS लंबे सशर्त अभिव्यक्तियों के लिए

1TBS ब्रेसिंग शैली के उपयोगकर्ता, आप if कथन और बाद के कोड में लंबी स्थितियों को कैसे प्रारूपित करते हैं?

if ((this_is_the_first_part_of_a_long_condition) 
    && (the_second_part_is_shorter__wait_no_it_is_not) 
    && (and_one_more_for_the_road)) { 
    here_comes_the_block_code(); 
} 

मुझे लगता है कि एक बेहतर तरीका होना चाहिए। मेरा वर्तमान तरीका कोड ब्लॉक की पहली पंक्ति से पहले एक खाली रेखा जोड़ना है। इस मामले में ऑलमैन बहुत अच्छा नहीं दिखता है, हालांकि मेरी राय में अधिक पठनीय है।

एक और उदाहरण for साथ छोरों:

for (int relevant_counter_variable_name = START_VALUE; 
    intelligent_expression_that_may_include_the_counter_variable; 
    relevant_counter_variable_update) { 
    first_code_line_inside_the_block(); 
} 

नहीं इतना अच्छा ...

KNF (8 रिक्त स्थान मांगपत्र) यहाँ मदद मिलेगी, लेकिन मुझे लगता है कि से बचने के लिए चाहते हैं। मेरे पास कुछ अन्य विकल्प हैं, लेकिन मैं सुनना चाहता हूं कि कोई मानक तरीका है या नहीं।

+6

यह ठीक मामले में जहां मैं अस्थायी रूप से ऑलमैन शैली करने के लिए स्विच, और समापन ब्रेस के साथ गठबंधन अपनी पंक्ति में उद्घाटन ब्रेस डाल के रूप में सार्थक नाम, दे सकते हैं। ऐसे लोग हैं जो "मिश्रण शैली" के बारे में चिल्लाएंगे और चिल्लाएंगे, लेकिन मुझे लगता है कि यह पठनीय कोड के लिए बनाता है। (स्पष्ट लेखन के लिए जॉर्ज ऑरवेल की मार्गदर्शिका का अंतिम नियम "कुछ नियमों को तोड़ने के बजाय इन नियमों में से किसी एक को तोड़ना है।") क्या आप कह सकते हैं कि आप क्यों सोचते हैं कि "यह बहुत अच्छा नहीं दिखता"? – librik

+0

@ लिब्रिक: हालांकि ब्लॉक (उद्घाटन ब्रेस) की शुरुआत वास्तव में 'if' का हिस्सा नहीं है, मुझे यह तथ्य पसंद है कि ऑलमैन इसे कीवर्ड के पहले अक्षर के नीचे सही स्थान पर रखता है। मेरी आंख उन्हें एक साथ रखती है, और यह बहुत तेज़ करता है। यदि स्थिति कई लाइनों के माध्यम से फैली हुई है, तो 'if' और '{' अलग दिखती है और मैं उन्हें रोना सुन सकता हूं। गंभीरता से, यह स्पष्ट रूप से स्पष्ट नहीं दिखता है कि वे एक ही कॉलम में हैं। – Gauthier

+1

मैं यहाँ libric के साथ हूँ - एक शैली का पालन करने के बजाय कोड को पठनीय बनाने के लिए और अधिक महत्वपूर्ण है। आपको ऐसे मामले मिल गए हैं जहां "नियम" शायद एक सिफारिश के रूप में देखा जाना चाहिए - यह आपकी पसंदीदा शैली का पालन करें, सिवाय इसके कि जब यह काम नहीं करता है। व्यक्तिगत रूप से मैं हर समय ऑलमैन शैली का पालन करता हूं, और इसमें भाग नहीं लेता हूं। :-) –

उत्तर

9
if (
    (this_is_the_first_part_of_a_long_condition) 
    && (the_second_part_is_shorter__wait_no_it_is_not) 
    && (and_one_more_for_the_road) 
) { 
    here_comes_the_block_code(); 
} 
+1

यह वास्तव में मैं इसे कैसे करता हूं। – Gauthier

+0

अब मुझे अनुपालन करने के लिए 'क्लैंग-प्रारूप' बताना होगा: '( – Gauthier

1

मिक्स-एन-मैच


मैं सहमत हैं कि मिश्रण शैलियों अक्सर पर सिकोड़ी है।
लेकिन, मुझे लगता है कि जहां संभव हो, नियम पठनीयता के लिए झुक सकता है।

ऐसे मामलों में जहां शैली सख्ती से से लागू , (कंपनी कोडिंग-नीतियों)
मैं आमतौर पर ऐसा करने के है:

if ( (this_is_the_first_part_of_a_long_condition) &&  
     (the_second_part_is_shorter__wait_no_it_is_not) && 
     (and_one_more_for_the_road)) { 
       here_comes_the_block_code(); 
} 

बस सब स्थितियों के लिए इंडेंट में से एक स्तर के उपयोग करते हैं,
और ब्रेसिज़ के अंदर कोड के लिए एक और अतिरिक्त स्तर।
यह किसी भी शुद्धवादियों को अपमानित किए बिना, जैसा कि इसे प्राप्त किया जा सकता है।

9

मैं डबल मांगपत्र जारी लाइनों:

if ((this_is_the_first_part_of_a_long_condition) 
     && (the_second_part_is_shorter__wait_no_it_is_not) 
     && (and_one_more_for_the_road)) { 
    here_comes_the_block_code(); 
} 
0

एकल अंतरिक्ष प्रत्येक स्तर के लिए इंडेंट, प्रत्येक शर्त है कि क्या जरूरत है या नहीं के लिए कोष्ठक का उपयोग करें।

जटिल परिस्थितियों के लिए ऑलमैन-स्टाइल कोष्ठक अच्छी तरह से काम कर सकते हैं।

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

प्रत्येक समापन तत्व को उद्घाटन तत्व के समान स्तर पर इंडेंट किया गया है, इसलिए "));" "Trace.WriteLine (String.Format (" और फ्रीस्टैंडिंग ";" "वापसी" के लिए।

वाईएमएमवी।

if (
    (
    (this_is_the_first_part_of_a_long_condition) && 
    (the_second_part_is_shorter__wait_no_it_is_not) && 
    (and_one_more_for_the_road) 
    ) || 
    (
    (this_is_the_first_part_yet_another) && 
    (
     (the_second_part_yet_another) || 
     (val < 22) 
    ) 
    ) 
    ) { 
     here_comes_the_block_code(); 

     int bits = 0 
     | O_DEF 
     | CONFIG_THIS 
     | CONFIG_THAT 
     ; 

     FILE *OUPT = fopen(
     "/tmp/oupt.txt", 
     "a+" 
    ); 

     Trace.WriteLine(String.Format(
     "format {0} 0x{1:x8}" 
     ,(eGenericDeviceFeatureEnum)val 
     ,val & 0x7ffffc00 
    )); 

     return 
     (CurrentWort != null) && 
     (CurrentWort.IsFeatureSupported(
     eGenericDeviceFeatureEnum.SupportsTriBromoCarcinogen 
     )) 
     ; 
    } 
2

मैं बस पूर्ण स्पष्टता और पठनीयता के लिए कुछ चर बर्बाद चाहते हैं:

cond1 = this_is_the_first_part_of_a_long_condition; 
cond2 = the_second_part_is_shorter__wait_no_it_is_not; 
cond3 = and_one_more_for_the_road; 
if (cond1 && cond2 && cond3) { 
    here_comes_the_block_code(); 
} 

वहाँ! 1 टीबीएस अपनी सारी महिमा में। कोई स्टाइल मिश्रण नहीं। कोई कुरूपता नहीं इंडेंट (1) /* *INDENT-OFF* */ धोखाधड़ी के बिना इसके साथ सौदा कर सकता है।

तुम भी स्थिति ऐसी

guidance = this_is_the_first_part_of_a_long_condition; 
navigation = the_second_part_is_shorter__wait_no_it_is_not; 
surgeon = and_one_more_for_the_road; 
if (guidance && navigation && surgeon) { 
    capcom_we_are_go_for_powered_descent(); 
} else { 
    agc_alarm(1202); 
}