2012-08-22 19 views
15

मैं यह तय करने की कोशिश कर रहा हूं कि जावास्क्रिप्ट अर्धविराम-कम शैली के साथ जाना उचित है या नहीं।जावास्क्रिप्ट अर्धविराम-कम कोड शैली और minification?

अगर मैं अर्धविराम बिना जावास्क्रिप्ट कोड है:

function(){ 
    var first = 1 
    var second = 2 
    sum = 1 + 2 
    return sum 
} 

यह ब्राउज़र और Node.js में काम करेंगे।

लेकिन क्या होगा (Uglify या Closure Compiler द्वारा) ब्राउज़र में कोड और Node.js?

मैंने लेख Semicolons in JavaScript are optional पढ़ा है। यह कहता है कि इसे काम करना चाहिए।

+22

उल्टा क्या है? क्या आपके कीबोर्ड में ';' कुंजी पर कुछ तेज है? – Pointy

+0

मेरे लिए कोड क्लीनर दिखता है – WHITECOLOR

+2

मिलिफिकेशन को केवल त्रिभुज को प्रतिस्थापित करने के लिए आवश्यक अर्धविराम जोड़ना चाहिए। – Bergi

उत्तर

21

मैं व्यक्तिगत रूप से एक समर्थक अर्धविराम व्यक्ति हूं, लेकिन विकल्प के लिए एक आकर्षक तर्क है, जो अक्सर given a fair voice नहीं होता है। जैसा कि सभी कोडिंग शैली तर्कों के साथ यह एक उचित निष्कर्ष के साथ कभी खत्म होने वाली बहस नहीं होगी। ऐसा करें जो आप और आपकी टीम के साथ अधिक आरामदायक महसूस करते हैं।

यदि आप एक मितव्ययी अर्धविराम दृष्टिकोण के लिए जाते हैं, तो सुनिश्चित करें कि आप और आपकी टीम automatic semicolon insertion (एएसआई) और कथन समाप्ति नियमों को सही ढंग से समझें। जो कुछ भी आपका निर्णय समझने के लिए निश्चित रूप से एक अच्छी बात है।

minification के संबंध में: यदि आप एक minifier बग और यह रिपोर्टिंग और इसे ठीक करने (या एक ठीक के लिए इंतजार) के जुड़े बोझ के संभावित सिरदर्द जोखिम के लिए है क्योंकि यह भारतीय पुरातत्व सर्वेक्षण को ठीक से नहीं कर रहा है, तो डॉन नहीं करना चाहते हैं एएसआई पर भरोसा नहीं है।

  • Isaacs (Node.js मेंटेनर, और इसलिए minification इस सवाल के प्रयोजनों के लिए नास्तिक) on the subject
  • उन्होंने सिफारिश की गई है इस उत्कृष्ट impartial analysis of the ASI rules
+1

धन्यवाद। निश्चित रूप से, आपकी जानकारी बहुत उपयोगी थी। – WHITECOLOR

3

ऐसा मत करो। अर्ध-कॉलन सम्मिलन एक बहुत ही खतरनाक चीज है। आकार लाभ अतिरिक्त जोखिम के लायक नहीं है।

Doulas Crockford आप की तरह नहीं होगा यदि आप यह :) http://youtu.be/hQVTIJBZook

+2

मैंने यह http://mislav.uniqpath.com/2010/05/semicolons/ – WHITECOLOR

+6

पढ़ा है :- डी जो मैंने सुना है, डगलस क्रॉकफ़ोर्ड आपको कभी पसंद नहीं करेगा;) (यदि आप उसके जैसा बिल्कुल कोड नहीं करते हैं) – Imp

+2

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

-1

IMHO, ऐसा नहीं है। आप वास्तव में इतना अधिक नहीं प्राप्त करते हैं और अर्धविराम AFAIK स्वचालित रूप से वहां रखा जाता है, और इसे एक ऐसे स्थान पर रखा जा सकता है जहां यह अजीब कीड़े पैदा करेगा।

1

कंपिलर और मिनीफायर शायद आवश्यक होने पर अर्धविराम जोड़ने के लिए पर्याप्त बुद्धिमान हैं (और यदि यह खनन प्रक्रिया में मदद करता है)।

हालांकि! एक अर्धविराम दुभाषिया को बताता है कि यह एक बयान का अंत है। यदि यह गुम है, तो यह बताने के लिए बयान जारी रखने के लिए अगली पंक्ति की शुरुआत को देखना होगा। फिर यह तय होगा, अगर अगली पंक्ति एक नया बयान है (यानी अर्धविराम गायब था) या यदि यह वास्तव में पिछली पंक्ति से बयान जारी है।

सेमीकॉलन के बिना, आप चीजों को धीमा कर रहे हैं! उल्लेख नहीं है कि यह कुछ अस्पष्ट त्रुटियों को पेश कर सकता है जब दुभाषिया, मैंने वर्णित एल्गोरिदम निष्पादित किया, गलत निर्णय लेता है!

+0

ऐसा लगता है कि एकमात्र संदिग्ध स्थिति तब होती है जब अगला कथन ब्रेस के साथ आता है "(" – WHITECOLOR

+0

@WHITECOLOR दुभाषिया को अभी भी यह तय करने के लिए अगली पंक्ति को देखना होगा। यह संभवतः बेंचमार्किंग के लायक है , लेकिन प्रत्येक पंक्ति के लिए ऐसा करने से चीजें धीमी हो जाएंगी। – Imp

4

के बावजूद कि जावास्क्रिप्ट में अर्धविराम वैकल्पिक हैं, वहाँ अर्धविराम का उपयोग नहीं के खिलाफ मजबूत सलाह है:

  • यह कीड़े सफेद स्थान को निकाल से उत्पन्न करने के लिए अपने कोड असुरक्षित बनाता है (minification में प्रयुक्त): इस प्रयास करें:

    var a = 1; var बी = 7; वर योग = ए + बी (ए + बी)

यह var a=1,b=7,sum=a+b(a+b);, जो त्रुटि number is not a function में परिणाम होगा करने के लिए minifies। other cases और this case भी हैं।

अद्यतन: इस बग minification से उत्पन्न नहीं किया गया था, हालांकि, अगले एक है:

  • यह minification से उत्पन्न कीड़े के लिए अपने कोड असुरक्षित बनाता है: प्रयास करें:

    var isTrue = true 
    
    function doSomething() { return 'yeah' } 
    
    function doSomethingElse() { return 'yes, dear' } 
    
    doSomething() 
    
    !isTrue && doSomethingElse() 
    

    को कम करता है:

    var isTrue=true;function doSomething(){return "yeah"}function doSomethingElse(){return "yes, dear"}doSomething()!isTrue&&doSomethingElse(); 
    

    जो फिर से sults में:

    SyntaxError: Unexpected token ! 
    
  • यह अपने कोड कम पठनीय और सुविधा के मामले में पोषणीय बनाता है: अर्धविराम का उपयोग करते हुए हक अच्छा अभ्यास के रूप में स्थापित किया गया है, और एक प्रशिक्षित जावास्क्रिप्ट डेवलपर सम्मेलन से बचने की कोशिश कर रहा कोड हैरान हो जाएगा ।

एक और बात यह है कि आपको खुद से पूछना है: आप वास्तव में अर्धविराम को छोड़कर क्या प्राप्त करते हैं?

  • स्वच्छ कोड? यदि आप जावास्क्रिप्ट को जावास्क्रिप्ट की तरह दिखाना नहीं चाहते हैं, तो Coffee Script आज़माएं। लेकिन some misguided notions हैं, जो मानते हैं कि उपर्युक्त वर्णित नुकसान जैसे «आसान समाधान: जब एक रेखा कोष्ठक के साथ शुरू होता है, तो इसे अर्धविराम तैयार करें।»। यह साफ कोड कैसा है, और यह आपके कोड को पढ़ने वाले किसी को भी कैसे मदद करता है?

नीचे पंक्ति: लघुकरण के साथ, मैं निश्चित रूप से JSLint के सम्मेलनों का उपयोग करने की कोशिश करता हूं। मैंने कुछ लोगों को आखिरकार अपने जावास्क्रिप्ट कोड को अनावृत में नहीं होने वाली बग को ठीक करने की कोशिश करने के कुछ घंटे बाद, लेकिन मिनी कोड में देखा है। अपने आप को इस दुख में मत डालो; अर्धविराम पहली नजर में बदसूरत हो सकता है, लेकिन वे बग को बाहर रखते हैं।

+0

धन्यवाद, आपकी राय मेरे लिए बहुत उपयोगी थी। – WHITECOLOR

+2

'var a = 1; var b = 7; var sum = a + b (a + b)' पहले से ही अमान्य है , यह आपके बिंदु को कैसे साबित करना चाहिए? –

+0

@ फ़ेलिक्सक्लिंग ट्रू, मैं वहां खो गया। इसे ठीक किया और मेरे बिंदु को साबित करने में एक तर्क शामिल किया। –

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