2010-07-10 7 views
33

काम पर, हम अगली पंक्ति पर ब्रेसिज़ लगाते हैं, लेकिन घर पर, मैं विपरीत करता हूं। तुम्हें कौन सा पसंद है? (कश्मीर & आर बनाम OTBS)जावास्क्रिप्ट नई लाइन पर ब्रेसिज़ है या नहीं?

function something() { 
    // ... 
} 

function something() 
{ 
    // ... 
} 

JavaScript लाइब्रेरी का एक बहुत OTBS (एक सच्चा ब्रेस शैली) का उपयोग करने लगते हैं। मैं अन्य जावास्क्रिप्ट परियोजनाओं के बीच निरंतरता के लिए उनका पालन करना चाहता हूं, लेकिन K & आर शैली अधिक पठनीय दिखता नहीं है?

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

+7

@ डिलेटर्स: अपना डिलीट वोट डालने से पहले, कृपया ध्यान दें कि उत्तर का मिश्रण तर्कसंगत होने के बिना जावास्क्रिप्ट संदर्भ में किसी भी शैली के फायदे और नुकसान को निष्कासित कर देता है ... कुछ उत्तरों के एंड आर शैली का उपयोग करने के लिए एक ठोस कारण देते हैं (अर्धविराम सम्मिलन मुद्दे के कारण), और एक बहुत ही आधिकारिक स्रोत (क्रॉकफोर्ड) उद्धृत करें। –

+4

वास्तव में, मुझे लगता है कि इस प्रश्न में तकनीकी कारण हैं (@ डैनियल का जवाब देखें) व्यक्तिपरक नहीं बल्कि अत्यधिक रचनात्मक होने के कारण। –

+3

जब हम इस अंतहीन लड़ाई से लड़ते हैं, तो पाइथन प्रोग्रामर अपने आकलन को हंसते हैं: डी –

उत्तर

28

यह एक पवित्र युद्ध है जिसके लिए आपको कभी भी उपयोगी जवाब नहीं मिलेगा! प्रोजेक्ट में जो कुछ भी है, उसके साथ बस रहें और बहस न करें!

इसके लायक होने के लिए, मैं एक के & अनुष्ठान हूं। मुझे लगता है कि ओटीबीएस एक उद्घाटन संरचना और निम्नलिखित कथन के बीच बहुत सी दृश्य स्थान रखता है, जब उन दो पंक्तियों को अक्सर दृढ़ता से संबंधित किया जाता है, तो बिना किसी हस्तक्षेप के लगभग एक खाली लाइन के बिना बेहतर प्रस्तुत किया जाएगा। मैं संबंधित कथन के ब्लॉक को अलग करने के लिए आरक्षित अपनी खाली रेखाएं रखना चाहता हूं।

एक कोडिंग शैली में जो बहुत सारे व्हाइटस्पेस है, यह अपेक्षाकृत महत्वहीन हो सकता है। लेकिन व्यक्तिगत रूप से मैं terseness मूल्य, तो मैं स्क्रीन पर अधिक कार्यक्रम रख सकते हैं।

मैं नहीं खरीदता कि क्लोज-ब्रेस के लिए एक अलग कॉलम पर ओपन-ब्रेस होना एक मुद्दा है। इंडेंट्स से ब्लॉक आकार को देखना अभी भी आसान है। जब तक आप लटकते इंडेंट्स का उपयोग नहीं कर रहे हों। ऐसा मत करो। लेकिन यह पूरी तरह से एक और पवित्र युद्ध है।

+1

क्या आप इस सम्मेलन का उपयोग अन्य भाषाओं के लिए भी करते हैं? PHP की तरह? – Tower

+4

व्यक्तिगत रूप से, जब मैं निर्णय लेता हूं, हाँ। यदि मैं नहीं हूं, क्योंकि मैं एक व्यापक परियोजना का हिस्सा हूं, इसलिए मैं बल नहीं दूंगा कि हर किसी पर काफी हद तक महत्वहीन वरीयता क्या है। – bobince

+3

अधिकांश भाषाओं के लिए मैं मानता हूं कि यह एक निर्बाध पवित्र युद्ध है और यह स्थिरता निर्णय लेने वाला कारक होना चाहिए, लेकिन मुझे लगता है कि जावास्क्रिप्ट के लिए अर्धविरामों के स्वचालित सम्मिलन में अंतर्निहित उद्घाटन ब्रेसिज़ के लिए एक वास्तविक तकनीकी तर्क प्रदान करता है। यकीन नहीं है कि मैं इसके साथ पूरी तरह से सहमत हूं, लेकिन यह धार्मिक, तर्क के बजाय तकनीकी है। – Keith

6

कोई भी दूसरे की तुलना में बेहतर नहीं है। बस एक चुनें और लगातार इसका इस्तेमाल करें।

+1

मैं मानता हूं कि स्थिरता सबसे महत्वपूर्ण कारक है, लेकिन पहला व्यक्ति कुछ क्षैतिज स्थान बचाता है और यही कारण है कि अब मैं इसे पसंद करता हूं। – grm

+0

@grm: मैं पहली शैली भी पसंद करता हूं, क्योंकि यह जावा के नामकरण सम्मेलनों की तरह है जिसका उपयोग मैं करता हूं। लेकिन कोई तर्क दे सकता है कि दूसरी शैली के परिणाम अधिक पठनीय कोड में हैं। हालांकि अंत में, आईएमएचओ, सही और रखरखाव करने योग्य जावास्क्रिप्ट कोड लिखने से संबंधित अधिक महत्वपूर्ण कारकों की तुलना में, और इस तथ्य पर विचार करके कि अधिकांश आईडीई कोड को एक क्लिक में किसी भी रूप में प्रारूपित कर सकते हैं (इंटेलिजे आईडीईए और वेबस्टॉर्म ऐसा कर सकता है) इस मुद्दे को अपना महत्व खो देता है। – Behrang

3

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

5

सभी व्यक्तिपरक। कुछ थोड़ा बेहतर हैं लेकिन अंतर नगण्य है। करने के लिए सबसे महत्वपूर्ण बात यह है कि आप अपने सभी कोड में सुसंगत रहें।

व्यक्तिगत रूप से, मैं 4 अंतरिक्ष 'असली' टैब के साथ शैली में टकरा पसंद करता हूं।

function a() { 
    if (b) { 
     do; 
    } else { 
     do2; 
    } 
}
+0

हर कोई रिक्त स्थान पसंद नहीं करता है, मैं टैब का उपयोग करता हूं। मैं अपने सभी कोड कनवर्टिंग टैब को रिक्त स्थान तक नहीं ले जाऊंगा (यहां तक ​​कि प्रतिस्थापन फ़ंक्शन के साथ)। आपके द्वारा लिखे गए कोड वह कोड है जो आपको यहां सबमिट करना चाहिए। दे दो या ले लो .. –

0

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

17

मैं डगलस क्रॉकफोर्ड के जावास्क्रिप्ट कोडिंग सम्मेलन का पालन करता हूं, जो सूर्य के जावा शैली दिशानिर्देशों से प्रेरित था। http://javascript.crockford.com/code.html

+0

मैं एक ही लिंक जोड़ना चाहता था। तो आपके लिए +1: आप अधिक तेज़ी से हैं! इसके अलावा मैं हमेशा जेएसलिंट के साथ अपने जावास्क्रिप्ट कोड को सत्यापित करने की सलाह देता हूं (http://www.jslint.com/ देखें)। वैसे, कोई यह सत्यापित कर सकता है कि ब्रेसिज़ रखने की दोनों शैलियों सही हैं। – Oleg

+1

महान बिंदु, कारण ब्रेस प्लेसमेंट वास्तव में मायने रखता है –

11

मेरी राय में, यह किसकी अपने कोड के साथ काम हो जाएगा पर निर्भर करता है:

यहाँ यह करने के लिए एक कड़ी है। यदि आप सी # टीम पर काम करते हैं और कई जिम्मेदारियों को साझा करते हैं, तो इसे एक नई लाइन पर रखें और अनिवार्य बाइकिंग से बचें जो अन्यथा पालन करेगा। यदि आप बहुत सारे PHP (या पुराने जेएस प्रोग्रामर) के साथ काम करते हैं, तो इसे उसी कारण के लिए पहली पंक्ति पर रखें।

लेकिन यदि आप कुछ और अधिक आधिकारिक खोज रहे हैं, तो डगलस क्रॉकफोर्ड का कहना है कि उद्घाटन ब्रेस always be on the top line होना चाहिए। उनका तर्क, अगर मुझे सही याद है, तो यह है कि यह शेष भाषा के साथ संगत बनाता है। असल में, क्योंकि यह मान्य है (संभवतः) गलत कोड:

function myFunc() 
{ 
    return 
    { 
     ok: true 
    }; 
} 

... आपको सार्वभौमिक रूप से एक नई लाइन पर खुले ब्रेसिज़ डालने से बचना चाहिए। क्यूं कर? क्योंकि प्रोग्रामिंग शैली को वाक्य रचनात्मक अस्पष्टता का कारण बनना चाहिए।

उपरोक्त नमूना कोड मान्य है क्योंकि यह पूरी तरह से वाक्य रचनात्मक रूप से सही है और यदि आप इसे लिखते हैं तो कोई अपवाद नहीं उठाया जाएगा। हालांकि, किसी ऑब्जेक्ट को शाब्दिक, {ok:true} लौटने की बजाय, यह undefined लौटाएगा और नीचे दिया गया कोड नहीं पहुंचा जाएगा। उद्घाटन ब्रेसिज़ को एक पंक्ति में रखें और यह वस्तु को शाब्दिक रूप से वापस कर देगा, शायद आप उम्मीद कर रहे थे।

सवाल यह है कि, क्या आप उस तर्क को पर्याप्त आकर्षक पाते हैं?

+7

बिल्कुल आकर्षक नहीं है। मेरा कोडिंग सम्मेलन: ए आप जो भी ब्रेस शैली चाहते हैं उसका प्रयोग करें। बी। ब्रैस स्टाइल पर निर्भर कोई भी निर्माण FUBAR है, और इसे सम्मेलन के रूप में टालना चाहिए। –

+0

मेरे पास जेएस के बारे में कोई सुराग नहीं है लेकिन मुझे लगता है कि यह व्यवहार कम अजीब हो जाता है जब आप कल्पना करते हैं कि आप निम्न चीज़ें कर रहे हैं: 1) आप कोई मान वापस नहीं करते हैं 2) आप सामग्री के साथ एक अनाम शब्दकोश बनाते हैं "ठीक है = सच "। तो यह ओटीबीएस के खिलाफ कोई तर्क नहीं है क्योंकि रिटर्न स्टेटमेंट को अपने तर्क से अलग करने की कोशिश करना सिर्फ खराब कोडिंग शैली है - उदासीनता कि आप किस ब्रेस शैली का उपयोग करते हैं। – jsz

124

Douglas Crockford कश्मीर & आर शैली चुनने के लिए एक कारण देता है:,

मैं हमेशा कश्मीर & आर शैली का उपयोग, सामने के बजाय एक पंक्ति के अंत में { डाल क्योंकि यह जावास्क्रिप्ट के return कथन में एक भयानक डिज़ाइन गलती से बचाता है।

भूल वह करने के लिए बात कर रहा है है कैसे जावास्क्रिप्ट निम्नलिखित दो स्थितियों में अलग तरह से return बयान संभालता है:

return { 
    'status': 'ok' 
}; 

... और:

return 
{ 
    'status': 'ok' 
}; 

पहले एक वापस आ जाएगी status संपत्ति वाला ऑब्जेक्ट, जबकि बाद में semicolon insertion की वजह से undefined वापस आ जाएगा।


Douglas Crockford: JavaScript: The Good Parts: Style (page 96) - ISBN: 978-0596517748.

+8

यह केवल एक ही मामला है, जहां आप नई लाइन पर ब्रेसिज़ का उपयोग कर अपवाद कर सकते हैं। – Tower

+19

@rFactor: हाँ, यह सिर्फ एक मामला है और आप इस मामले के लिए अपवाद बना सकते हैं ... लेकिन मैं शेष बकाया बिंदु को देखता हूं, और रिटर्न स्टेटमेंट के लिए अपवाद नहीं बना रहा हूं। दूसरी ओर, मुझे के एंड आर शैली पसंद है, इसलिए यह मेरे लिए अच्छा है :) –

+6

आपको कोडिंग सम्मेलनों में अपवाद बनाने की आवश्यकता नहीं है। बस ऑब्जेक्ट को एक अस्थायी चर पर सेट करें और इसे अस्थायी चर लौटा दें। – Tower

0

मैं उपरोक्त एक ही कारण के लिए K & आर विधि पसंद करते हैं। यह अधिक कॉम्पैक्ट दिखता है, और दो प्रासंगिक लाइनों को एक साथ समूहीकृत किया जाता है।

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