2012-09-02 21 views
12

मुझे हाल ही में इसका एहसास नहीं हुआ, लेकिन जावास्क्रिप्ट कोड लिखते समय मैं Allman style का उपयोग करता हूं।क्या यह सच है कि मुझे जावास्क्रिप्ट लिखते समय के एंड आर स्टाइल का उपयोग करना चाहिए?

http://encosia.com/in-javascript-curly-brace-placement-matters-an-example/ के अनुसार मुझे K&R style का उपयोग करना चाहिए। ऐसा इसलिए है क्योंकि कुछ स्थितियों में घुमावदार ब्रैकेट की अगली पंक्ति पर प्लेसमेंट समस्याएं पैदा कर सकता है। मेरे लिए समस्या यह है कि मैं ऑलमैन शैली के शौकीन हो गया हूं और बदले में नहीं बदलेगा।

तो, मेरे सवाल (रों)

  • यह सही है कि ऑलमैन शैली कर सकते हैं जावास्क्रिप्ट में कर्ली कोष्ठक की नियुक्ति की वजह से त्रुटियों का कारण? Jquery के बारे में कैसे?

  • क्या कोई चाल है जो मुझे घुमावदार ब्रैकेट के कारण समस्याओं के बिना ऑलमैन शैली का उपयोग करने में सक्षम बनाती है?

  • क्या इन शैलियों का उपयोग करने से संबंधित कोई अन्य समस्या है?

+3

मुझे लगता है कि यह इस बात पर निर्भर करता है कि आप कितनी बार ऑब्जेक्ट अक्षर –

+0

लौटते हैं, मैं पठनीयता को छोड़कर उत्पन्न होने वाली किसी भी समस्या को नहीं देख सकता। हालांकि के एंड आर मेरे लिए अधिक समझ में आता है, क्योंकि मैं अक्सर फंक्शन कॉल के भीतर फ़ंक्शंस और/या ऑब्जेक्ट्स घोषित करता हूं (उदाहरण के लिए 'सेटटाइमआउट (1000, फ़ंक्शन() {complex_functions_content}); जटिल फ़ंक्शन की सामग्री एक में होगी नई लाइन और क्लोजिंग ब्रैकेट्स (घुंघराले और गोल दोनों) एक ही इंडेंटेशन स्तर पर सेटटाइमआउट फ़ंक्शन कॉल के रूप में अंतिम पंक्ति में हैं। ऑलमैन शैली के साथ ऐसा कोड लिखना अजीब IMHO दिखाई देगा। – Mark

+0

यह डरावना है .. –

उत्तर

8

यह सही है कि ऑलमैन शैली कर सकते हैं जावास्क्रिप्ट में कर्ली कोष्ठक की नियुक्ति की वजह से त्रुटियों का कारण?

हाँ, यह है। जैसा कि आपका लिंक बताता है, return बयान के बाद एक नई लाइन पार्सर को भ्रमित कर देगी क्योंकि यह अर्धविराम डालने का प्रयास करती है। यह व्यवहार ऑब्जेक्ट अक्षरों को लौटने तक सीमित नहीं है, हालांकि। निम्न कार्य:

function foo() 
{ 
    return 
     "bar"; 
} 

undefined भी वापस आएगा।

jquery के बारे में कैसे?

स्थिति बिल्कुल वही है जो jQuery शामिल है या नहीं।

क्या कोई चाल है जो मुझे घुंघराले ब्रैकेट के कारण समस्याओं के बिना ऑलमैन शैली का उपयोग करने में सक्षम बनाती है?

हां, ऑब्जेक्ट अक्षर के साथ ऑलमैन शैली का उपयोग न करें। मान लें कि आप किसी ऑब्जेक्ट को शाब्दिक ऑब्जेक्ट असाइन करना चाहते हैं। IMHO दूसरा टुकड़ा पहले की तुलना में अधिक पठनीय है

var foo = { 
    bar: "quux" 
}; 

: आप के लिए जाना होगा

var foo = 
{ 
    bar: "quux" 
}; 

या: तुम सच में लिखने के लिए जा रहे हैं। आप for, if, while, function, आदि के अंदर ब्रेसिज़ के साथ ऑलमैन शैली का उपयोग करना जारी रख सकते हैं, लेकिन ऑब्जेक्ट अक्षर के लिए अपवाद बना सकते हैं।

क्या इन शैलियों का उपयोग करने से जुड़े कोई अन्य समस्याएं हैं?

return काफी विशेष मामला है, क्योंकि यह तर्क के साथ या बिना मान्य है। जब एक पंक्ति पर एक अकेला return कथन का सामना करना पड़ता है, तो पार्सर यह नहीं बता सकता कि क्या इसे एकल-पंक्ति कथन वैध बनाने के लिए अर्धविराम जोड़ना चाहिए, या अगली पंक्तियों पर जारी रहना चाहिए और सर्वोत्तम के लिए आशा करना चाहिए।

इस कारण से, मुझे लगता है कि यह व्यवहार केवल return और throw के साथ कोई समस्या नहीं बनता है, अन्य विवरण नहीं।

+0

यह व्यवहार spec-compliant है और [केवल एक समस्या * बनता है * न केवल 'वापसी' के साथ] (http://stackoverflow.com/a/12234451/1081234) –

+1

@ov, प्रैक्टिस में, 'जारी रखें' और 'ब्रेक' ऑब्जेक्ट शाब्दिक नहीं, एक वैकल्पिक पहचानकर्ता ले लो। करो ...जबकि 'केवल' समस्याओं को उत्पन्न करेगा यदि 'ऑब्जेक्ट 'किसी ऑब्जेक्ट का मूल्यांकन करता है, जो तर्कसंगत रूप से एक अनंत लूप को लागू करने का एक जटिल तरीका है। 'फेंक' पर आपका बिंदु खड़ा है, हालांकि, अगर ऑब्जेक्ट अक्षर को फेंकना भी मेरे अनुभव में काफी दुर्लभ है। –

+1

मैं वास्तव में ब्रैकेट के साथ ओपी के विशिष्ट परिदृश्य पर ध्यान केंद्रित नहीं कर रहा था बल्कि सामान्य रूप से उन बयानों के बाद लाइनों को तोड़ने में असमर्थता (यानी 'जारी नहीं' [लेबल] ', डुह), लेकिन लाइनों को तोड़ने की क्षमता वे सशर्त आदि के बाद कामना करते हैं –

2

मन ECMAScript specification regarding automatic semicolon insertion रखें:

कुछ ECMAScript बयान (खाली बयान, चर बयान, अभिव्यक्ति बयान, do-while बयान, continue बयान, break बयान, return बयान, और throw बयान) होना चाहिए सेमीकॉलन के साथ समाप्त कर दिया। ऐसे सेमीकॉलन हमेशा स्रोत टेक्स्ट में स्पष्ट रूप से दिखाई दे सकते हैं। सुविधा के लिए, हालांकि, ऐसे अर्धविरामों को कुछ स्थितियों में स्रोत टेक्स्ट से छोड़ा जा सकता है। ये स्थितियां कह रही हैं कि अर्धविराम स्वचालित रूप से में उन स्थितियों में स्रोत कोड टोकन स्ट्रीम में डाले जाते हैं।

मैंने ऊपर यह "सुविधाजनक" है कि सुझाव पर हंसते ...

आप तकनीकी रूप से कर सकता है उपरोक्त में शामिल नहीं मामलों में ऑलमैन स्वरूपण का उपयोग जारी रखने सकता है, मैं स्थिरता प्रचार करेंगे। व्यक्तिगत रूप से मैं Google JS styleguide का प्रशंसक हूं - आपके प्रश्न के लिए प्रासंगिक अनुभाग code formatting और semicolons हैं। सूचीबद्ध उदाहरणों की जांच करने लायक हैं।