जावास्क्रिप्ट से अर्धविराम को हटाने / छोड़ने के लिए हाल ही में बदलाव क्यों?


79

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

यहां तक ​​कि GitHub ने नो-सेमीकोलन बैंडवागन पर छलांग लगाई है , जिसे किसी भी आंतरिक रूप से विकसित कोड में अपनी चूक की आवश्यकता होती है, और इसके अनुरक्षक द्वारा zepto.js परियोजना के लिए हाल ही में किए गए कमिट ने सभी अर्धविरामों को कोडबेस से हटा दिया है। उनके प्रमुख औचित्य थे:

  • यह उनकी टीम के लिए प्राथमिकता की बात है;
  • कम टाइपिंग

क्या उन्हें छोड़ने के अन्य अच्छे कारण हैं?

सच कहूं तो मैं उन्हें छोड़ने का कोई कारण नहीं देख सकता, और निश्चित रूप से उन्हें मिटाने के लिए कोड पर वापस जाने का कोई कारण नहीं है। यह अनुशंसित अभ्यास के खिलाफ ( वर्षों के ) भी जाता है , जिसके लिए मैं वास्तव में "कार्गो पंथ" तर्क नहीं खरीदता हूं। तो, सभी हाल ही में अर्धविराम-घृणा क्यों? क्या कोई कमी है? या यह सिर्फ नवीनतम जावास्क्रिप्ट सनक है?


2
"अनुशंसित अभ्यास के वर्ष" ब्लैकलिस्टेड एसओ पोल टैग के एक प्रश्न का संदर्भ देते हैं, जो किसी भी तरह की राय का समर्थन करने के लिए आधिकारिक नहीं बनाता है
gnat

24
@ केवल इसलिए कि लोग SO पर होने वाले सवाल से नफरत करते हैं, यह लोगों की राय का कम वैध स्रोत नहीं है।
रायाथाल

3
@gnat प्रश्न जो "स्टैकऑवरफ्लो पर आधिकारिक तौर पर अनुचित माना जाता है" कभी-कभी विशेषज्ञ समुदाय द्वारा बहुत आधिकारिक माना जाता है। दुखद लेकिन सत्य।
MarkJ

4
@gnat ब्लैकलिस्ट किए गए प्रश्न के वास्तव में कुछ बहुत ही दिलचस्प उदाहरण हैं कि क्यों छोड़ना ;आपके कोड को तोड़ सकता है। तो मैं कहूंगा कि यह इस प्रश्न के लिए एक उपयोगी संदर्भ है।
एंड्रेस एफ

1
यह 2010 की शुरुआत में हिपस्टर्स की बढ़ती प्रमुखता से संबंधित हो सकता है ।
एलेक्स

जवाबों:


61

मुझे लगता है कि मेरा कारण सबसे बड़ा है: मैं एक ही समय में कई अलग-अलग भाषाओं में कार्यक्रम करता हूं (जावा, जावास्क्रिप्ट, पीएचपी) - जिसकी आवश्यकता है; ' इसलिए मेरी उंगलियों और आंखों को प्रशिक्षित करने के बजाय ';' जावास्क्रिप्ट के लिए आवश्यक नहीं है, मैं हमेशा 'जोड़;'

अन्य कारण प्रलेखन है: ';' जोड़कर मैं स्पष्ट रूप से अपने आप को बता रहा हूं कि मैं बयान समाप्त होने की उम्मीद करता हूं। फिर मैं हर समय {} का उपयोग करता हूं।

पूरे बाइट की गिनती तर्क मुझे परेशान और व्यर्थ लगती है:

1) jquery जैसे आम पुस्तकालयों के लिए: google CDN का उपयोग करें और लाइब्रेरी संभवतः ब्राउज़र कैश में पहले से ही होगी

2) अपने स्वयं के पुस्तकालयों को संस्करण दें और उन्हें हमेशा के लिए कैश करने के लिए सेट करें।

3) gzip और कम से कम अगर वास्तव में, वास्तव में आवश्यक है।

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


3
मुझे लगता है कि विपरीत भी सच हो सकता है। जैसे-जैसे अजगर वेब के लिए अधिक लोकप्रिय होता जाता है, वैसे-वैसे आपका जेएस से मिलता-जुलना आसान होता जाता है।
बेन डीमोट

4
कोशिश करो लेकिन फिर वही बाइट योद्धा मेरे लिए लाइनों की शुरुआत में अनावश्यक व्हाट्सएप के बाद होगा। (मेरे पास जावास्क्रिप्ट कीड़े भी होंगे क्योंकि मैं {}
पैट

6
यदि बाइट काउंट कम करना महत्वपूर्ण है, तो आपके पास कुछ ऐसा होगा जो फाइलों को यथासंभव कम से कम करेगा। यदि यह अभी तक एक न्यूनतम का उपयोग करने के लायक नहीं है, तो इसे हटाने के बारे में चिंता करने योग्य नहीं है ';' बाइट काउंट को बचाने के लिए।
20ton पर Lawtonfogle

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

गहरी घोंसले को समझने के लिए मनुष्य को आक्रोश की आवश्यकता होती है, जिसमें अर्धविराम की तुलना में अधिक बाइट्स की आवश्यकता होती है। अर्धविराम, कीप्स के कचरे को विचलित कर रहे हैं, हालांकि।
सेस टिम्मरमैन

39

यह विधि को आसान बनाता है और क्लीनर अलग करता है

तो चलो कहते हैं कि मैं jQuerying हूँ और मेरे पास है

$('some fancy selector')
  .addClass()
  .attr();

अगर मुझे सामान जोड़ना है और अपनी लाइन-आधारित कमिट को अलग रखना है , तो मुझे इसे अटारी के ऊपर जोड़ना होगा। तो यह केवल "अंत में जोड़ें" की तुलना में एक विचार है। और कौन सोचना चाहता है? =)

$('some fancy selector')
  .addClass()
  // new method calls must go here
  .attr();

लेकिन, जब मैं अर्ध-कॉलोन छोड़ता हूं, तो मैं इसे केवल एक दिन जोड़ सकता हूं और कॉल कर सकता हूं

  $('some fancy selector')
    .addClass()
    .attr()
+   .animate()
+   .click()

इसके अलावा, अगर मैं अंतिम पद्धति को बंद करने का निर्णय लेता हूं, तो मुझे अर्ध-उपनिवेश को फिर से सौंपने और अपनी प्रतिबद्धताओं को फिर से प्रदूषित करने की आवश्यकता नहीं है।

  $('some fancy selector')
    .addClass()
    .attr()
    .animate()
-   .click()

कुर्गों का वर्सा लें

  $('some fancy selector')
    .addClass()
    .attr()
+   .animate();
-   .animate()
-   .click();

37
यह आला उपयोग मामला IMO है।
JBRWilkinson

9
लेकिन फिर भी दिलचस्प है।
जोनाथन

8
आप एक नई लाइन के अंत में अर्धविराम लगा सकते हैं, जो शुरुआती लाइन के रूप में इंडेंटेड है। फिर आप अपनी इच्छानुसार चीजों को कॉपी और रीऑर्डर करते हैं। यह भी श्रृंखला अच्छी तरह से बंद कर देता है।
नक्स

11
क्या यह सिर्फ मुझे है जो आश्चर्य करता है कि कोई भी क्यों परवाह करेगा कि उनके कमिट के रूप कितने साफ दिखते हैं? एक सामान्य नियम के रूप में, लोग कोड पढ़ते हैं, भिन्न नहीं होते हैं।
जूल्स

11
@ जूल्स, क्लीनर अलग मतलब है कि मर्ज सफल होने की अधिक संभावना है।
joeytwiddle

22

जावास्क्रिप्ट में अर्ध कॉलन वैकल्पिक हैं

सेमी कॉलोन का उपयोग नहीं करने का मेरा व्यक्तिगत कारण ओसीडी है।

जब मैं अर्ध उपनिवेशों का उपयोग करता हूं तो मैं उनमें से 2% भूल जाता हूं और उन्हें लगातार वापस जांच / जोड़ना पड़ता है।

जब मैं अर्ध उपनिवेशों का उपयोग नहीं करता हूं तो मैंने कभी गलती से भी एक को नहीं रखा है, इसलिए मुझे कभी भी उन्हें जांच / हटाने की आवश्यकता नहीं है।


3
अच्छा था। मैं एक अर्धविराम-कम पंक्ति या दो से अन्यथा एक ठीक से अर्धविराम फ़ाइल में जला दिया गया है।
जोनाथन

3
पार्सर्स (जैसे गीसी) हैं जो अर्धविराम मौजूद नहीं होने पर आपके कोड को सही ढंग से पार्स नहीं करेंगे। आप कह सकते हैं कि मनुष्य ऐसी गलतियाँ नहीं करेंगे ... लेकिन गंभीरता से - घटना अगर आपकी टीम यह याद रखने के लिए प्रबंधन करेगी कि अर्धविराम को कहाँ रखा जाना चाहिए, तो क्या आपको वाकई लगता है कि वे सुबह की कॉफी के बिना इसे याद रखेंगे? और वे कई राज्यों को ध्यान में रखेंगे। यह सुनिश्चित करें।
नक्स

16

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

जाहिर है, jQuery, zepto, आदि जैसे फ्रेमवर्क लिखने वाले लोग जावास्क्रिप्ट सिंटैक्स स्वामी हैं और इस प्रकार वे इसके लिए अंतर जानते हैं:

return
{
    status: true
};

तथा

return {
    status: true
};

जावास्क्रिप्ट, जबकि शक्तिशाली, एक शुरुआत की भाषा भी है और सौभाग्य यह किसी को समझा रहा है जो बस सीख रहा है कि एक forलूप क्या है। अधिकांश लोगों को एक नए कौशल से परिचित कराने की तरह, कुछ और जटिल चीजें हैं जिन्हें आप अभी स्पष्ट नहीं करना चाहते हैं, इसलिए इसके बजाय आप जमीन से हटने के लिए कुछ चीजों में "कार्गो पंथ" विश्वास पैदा करना चुनते हैं। तो, आपके पास दो विकल्प हैं जब एक शुरुआत सिखाते हैं कि जावास्क्रिप्ट कैसे लिखें:

  1. उन्हें बताएं "इस एक नियम का पालन करें और क्यों न पूछें", उन्हें हर पंक्ति के अंत में हमेशा अर्धविराम लगाने के लिए कहा । दुर्भाग्य से, यह ऊपर दिए गए उदाहरण में, या एएसआई के रास्ते में किसी भी अन्य उदाहरण में मदद नहीं करता है। और जब कोड ऊपर विफल रहता है, तो मिस्टर या सुश्री शुरुआती प्रोग्रामर को परेशान किया जाता है।
  2. उन्हें बताएं कि "इन दो नियमों का पालन करें और क्यों न पूछें", उन्हें हर पंक्ति के अंत में अर्धविराम से परेशान नहीं करने के लिए कह रहा है, और इसके बजाय हमेशा ए) returnएक के साथ पालन ​​करें {, और बी) जब एक पंक्ति के साथ शुरू होता है (, तो प्रीपेन्ड करें इसके साथ ए ;

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


8
सब ठीक है, मैं काटता हूँ। उपरोक्त दो उदाहरणों के बीच वाक्यविन्यास के अंतर को समझने में मेरी मदद करें। मेरी अप्रशिक्षित आंख केवल स्वरूपण में अंतर देखती है।
जेसी सी। स्लाइसर

9
या, दूसरी ओर, मैं सरासर दुर्घटना से जवाब में ठोकर खाई। पहले उदाहरण में, returnएक एकान्त कथन माना जाता है और लाइन-एंड एक अर्धविराम के बराबर होता है। दूसरा उदाहरण वास्तव में वस्तु को लौटाता है। मक्कार।
जेसी सी। स्लीसर

9
मुझे नहीं लगता कि मैं इस विचार से सहमत हो सकता हूं कि जावास्क्रिप्ट एक शुरुआती भाषा है, जावास्क्रिप्ट में टन असंगतताएं और आश्चर्य प्रभाव हैं जो सरल स्पष्टीकरण नहीं हैं। IMO एक शुरुआती भाषा नहीं होगी, मैं जावास्क्रिप्ट को एक मध्यवर्ती भाषा कहूंगा।
रयाथल

2
@ रायथल मैं समझता हूं कि आप क्या कर रहे हैं, लेकिन इसे एक मध्यवर्ती भाषा कहकर मुझे आश्चर्य होता है कि यह किन भाषाओं में अंतर-मध्यस्थता है। आप इसे ध्वनि बनाते हैं जैसे कि यह किसी और चीज के लिए एक गंतव्य की बजाय यात्रा का एक कदम है।
रचेत

9
स्पष्ट करने वाला बिंदु: returnउदाहरण वास्तव में सामान्य जेएस व्यवहार का एक अपवाद है जो अर्ध-बृहदान्त्र छोड़े जाने पर लाइनों को एक साथ खींचने का प्रयास करता है। return, breakऔर continueसभी इस असाधारण व्यवहार का प्रदर्शन करते हैं जिसमें एक अनुगामी न्यूलाइन हमेशा बयान के अंत के रूप में व्याख्या की जाती है। (स्रोत है फलागन का "जावास्क्रिप्ट: द डेफिनिटिव गाइड" pp25-26)। व्यक्तिगत रूप से, मैं "कम से कम आश्चर्य के कोड" के विचार के लिए प्रयास करता हूं। अर्ध-कोलों को छोड़ देने से किसी भी चीज की तुलना में अधिक आश्चर्य होता है (मैं साधारण बयानों के लिए भी आमतौर पर अपने घुंघराले ब्रेसों को रखता हूं)।
काइल

16

जानकारी अधिभार, केवल खराब डिजाइन जैसी कोई चीज नहीं है।

- एडवर्ड टफ्टे

यह ग्राफिक डिजाइन में एक सामान्य नियम है शोर को कम करने के लिए अनावश्यक तत्वों और अलंकरण को छोड़ने के लिए ।

स्क्रीन पर कम दृश्य तत्व का मतलब है हमारे दिमाग के लिए वास्तविक उपयोगी जानकारी को पार्स करने के लिए कम काम करना।

let foo = 1

बनाम

let /* variable */ foo = 1; // EOL

बेशक एक अतिरंजित उदाहरण है, लेकिन यह सामान्य सिद्धांत को दिखाता है: अतिरिक्त दृश्य तत्वों को जोड़ा जाना चाहिए अगर और केवल यदि वे एक उद्देश्य की सेवा करते हैं। तो, क्या अर्धविराम एक उद्देश्य की पूर्ति करते हैं?

जावास्क्रिप्ट में अर्धविराम का उपयोग करने के ऐतिहासिक कारण थे:

  • C / Java में समानता बनाए रखें
  • खराब लिखित ब्राउज़र और टूल के साथ संगतता समस्याओं से बचें
  • मनुष्यों और मशीनों को कोड त्रुटियों का पता लगाने में मदद करना
  • स्वचालित अर्धविराम सम्मिलन एक प्रदर्शन जुर्माना करता है

संगतता मुद्दे आज बहुत अधिक गैर-मुद्दे हैं। आधुनिक लिंटर किसी भी कोड त्रुटियों का पता लगा सकते हैं और साथ ही अर्धविराम के बिना भी। C / Java / PHP के साथ समानता अभी भी एक विचार हो सकता है ( स्वीकृत उत्तर देखें) पैट द्वारा ), लेकिन सिर्फ इसलिए कि अन्य भाषाओं में अति सूक्ष्म वाक्यविन्यास तत्व हैं इसका मतलब यह नहीं है कि हमें उन्हें जावास्क्रिप्ट में रखना चाहिए, खासकर जब से कई अन्य भाषाओं (कॉफ़ीस्क्रिप्ट, पायथन) रूबी, स्काला, लुआ) को उनकी आवश्यकता नहीं है।

मैंने यह देखने के लिए एक त्वरित परीक्षण किया कि क्या वी 8 में प्रदर्शन दंड था या नहीं। यह Io.js है, जिसमें अर्धविराम और फिर अर्धविराम हटाए गए 41 एमबी जावास्क्रिप्ट फ़ाइल (लोडश को 100 बार दोहराया गया) के साथ पार्स किया जाता है:

$ time node lodashx100.js
node lodashx100.js  2.34s user 1.30s system 99% cpu 3.664 total
$ time node lodashx100s.js
node lodashx100s.js  2.34s user 1.15s system 99% cpu 3.521 total

सभी को अपनी परियोजनाओं के लिए अपनी खुद की पसंदीदा कोडिंग शैली तय करनी होगी, लेकिन मैं अब अर्धविराम का उपयोग करने में कोई ठोस लाभ नहीं देख सकता हूं, इसलिए दृश्य शोर को कम करने के लिए, मैंने रोक दिया है।


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

8

प्रोग्रामिंग सम्मेलन चुनना प्रभावी रूप से लक्ष्य भाषा के सबसेट को चुनने के समान है। हम सभी सामान्य कारणों से ऐसा करते हैं: कोड पठनीयता, स्थिरता, स्थिरता, पोर्टेबिलिटी, आदि - जबकि संभावित रूप से लचीलेपन का त्याग। ये कारण वास्तविक व्यावसायिक कारण हैं।

"कीस्ट्रोक्स को बचाने", और "प्रोग्रामर को जावास्क्रिप्ट नियम सीखना चाहिए" जैसे कारण सीमांत व्यावसायिक कारण हैं, इसलिए वे थोड़ा व्यावहारिक भार उठाते हैं।

मेरे मामले में मुझे बहुत तेजी से जावास्क्रिप्ट में आने की जरूरत थी, इसलिए भाषा का एक सीमित सबसेट का लाभ मेरे लाभ के लिए था। इसलिए मैंने जावास्क्रिप्ट के JSLint सबसेट को चुना, रॉकस्टार ऐप JSLinter को Eclipse में चालू किया जो सबसे अधिक प्रतिबंधात्मक सेटिंग्स मैं खड़ा हो सकता था, और पीछे मुड़कर नहीं देखा।

मैं "==" और "===", या अर्धविराम सम्मिलन के विवरण के बीच के अंतर से बचने में सक्षम होने के लिए आभारी हूं, क्योंकि मुझे पहले ही एक मील की उच्च कार्य सूची मिल गई है और वे विवरण नहीं मिलेंगे उन नौकरियों को एक सेकंड पहले करने में मदद करें।

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


5

काफी पुराना सवाल, हालांकि मुझे आश्चर्य है कि किसी ने भी इसका उल्लेख नहीं किया है:

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

अस्पष्टता: अर्ध-कॉलोन वैकल्पिक, सच हैं, हालांकि उन्हें स्रोत-कोड से समाप्त करने से, आप पार्सर को कुछ अस्पष्ट परिदृश्यों को स्वयं तय करने के लिए छोड़ सकते हैं। यदि आप एक ऑनलाइन दुकान के लिए कोड की 100 पंक्तियाँ लिख रहे हैं, तो, शायद यह मायने नहीं रखता, लेकिन अधिक गंभीर कार्यों के लिए 100% स्पष्टता की आवश्यकता होगी।

बहुत समय पहले मैंने किसी और चीज़ के बारे में बहुत अच्छी सादृश्यता पढ़ी थी लेकिन यह इस मामले में भी बहुत सही है: (हमारे मामले में) अर्ध-कॉलनों को खत्म करना एक लाल बत्ती को पार करने जैसा है। आप अंत में ठीक हो सकते हैं या आप ट्रक की चपेट में आ सकते हैं।

यह इन दिनों अधिक लोकप्रिय क्यों हो रहा है?

मेरा व्यक्तिगत रूप से मानना ​​है कि जावास्क्रिप्ट के सर्वर-साइड पर चलने का जावास्क्रिप्ट समुदाय पर बहुत अधिक प्रभाव था। हमारे मामले में, जाहिर है कि कोई भी सर्वर-साइड पर जावास्क्रिप्ट को छोटा करने वाला नहीं है (जैसा कि स्रोत-कोड क्लाइंट के वेब ब्राउज़र को शिप नहीं करना चाहिए), इसलिए कोई भी अर्ध-कॉलोन ज्यादा सुरक्षित नहीं दिखता है जो सच है; हालाँकि अन्य डेवलपर जो इन पुस्तकों, लेखों और वीडियो से सीखते हैं, वे दुर्भाग्य से इस तथ्य को खारिज करते हैं कि सर्वर-साइड पर जावास्क्रिप्ट क्लाइंट-साइड में जावास्क्रिप्ट के समान नहीं है।


मिनिअर एकल-वर्ण के न्यूलाइन्स में छोड़ सकते हैं या अर्ध-कॉलनों को सम्मिलित कर सकते हैं जब अर्ध-कॉलोन बिना आकार के दंड के मौजूद नहीं होते हैं। मैं नहीं जानता कि कौन (यदि कोई हो) मिनिफ़ायर ऐसा करते हैं। खतरा अभी भी उनमें से कम से कम में मौजूद है, इसलिए आपकी बात अभी भी चलन में है।
जैस

3

उन्हें अंदर रखने के अच्छे कारण हैं।

वे वास्तव में वैकल्पिक नहीं हैं, जेएस उन्हें स्वचालित अर्धविराम सम्मिलन के साथ वापस जोड़ सकते हैं जब वे गायब होते हैं लेकिन यह एक ही बात नहीं है।

डगलस क्रॉफोर्ड की जावास्क्रिप्ट: द गुड पार्ट्स दो अलग-अलग अवसरों पर कहता है कि यह एक बुरा विचार है। स्वचालित अर्धविराम सम्मिलन आपके प्रोग्राम में बग छिपा सकता है और अस्पष्टता पैदा करता है।

JSLint अनुमोदन नहीं करता है।


3

एक दशक में बयानों को समाप्त करने के लिए जावास्क्रिप्ट को अर्ध-कॉलनों की आवश्यकता नहीं है। ऐसा इसलिए है क्योंकि न्यूलाइन वर्णों को स्टेटमेंट टर्मिनेटर्स माना जाता है (मेरा मानना ​​है कि इसका उल्लेख प्रारंभिक इस्मैप्टिक स्पेक्स में भी किया गया है)। यह वास्तव में बहुत मायने रखता है, खासकर जब से वास्तव में कोई अच्छा कारण नहीं है [कि मुझे पता है] कि क्यों जावास्क्रिप्ट को अर्ध-कॉलनों के लगातार उपयोग की आवश्यकता होगी लेकिन रूबी या पायथन जैसी अन्य व्याख्यात्मक घोषित भाषाओं की नहीं।

अर्ध-कॉलनों की आवश्यकता के लिए एक भाषा के लिए एक पार्सर लिखना आसान हो सकता है, लेकिन अगर हर दुभाषिया अर्ध-कॉलोनों के चूक का समर्थन करता है तो वास्तव में क्या है?

यह क्या करने के लिए नीचे आता है कि एक प्रोग्रामर कितना ज्ञानी है: यदि आप जानते हैं कि आप एक अर्ध-बृहदान्त्र को छोड़ सकते हैं, तो यह समझने के लिए स्वतंत्र महसूस करें कि कोई परिणाम हो सकता है या नहीं। मानव निर्णय लेने वाली मशीन है और लगभग सभी निर्णयों के लिए कुछ समझौता या व्यापार बंद की आवश्यकता होती है। ट्रेड-ऑफ सिर्फ आपके कोड के चारों ओर अर्ध-कॉलोनों को फेंकने के लिए (यहां तक ​​कि उन जगहों पर जहां उन्हें ज़रूरत नहीं है) यह है कि आपका कोड कम पढ़ने योग्य हो जाता है (आपके पूछने पर निर्भर करता है) और जेएसएलआईएनटी को शिकायत नहीं होगी (कौन परवाह करता है) )। दूसरी ओर, अर्ध-कॉलोन को छोड़ने का व्यापार बंद तथ्य यह है कि जावास्क्रिप्ट प्रोग्रामर का 90% आपको इसके लिए प्रेरित करेगा, लेकिन आप अंत में जावास्क्रिप्ट को लिखने का आनंद ले सकते हैं।

आपको क्या अच्छा लगता है; सूचित निर्णय या अंधा निर्णय लेने / झुंड-मानसिकता?


मुझे यह जानने में दिलचस्पी होगी कि यह गिरावट क्यों आई है। जावास्क्रिप्ट को बयानों को समाप्त करने के लिए अर्ध-कॉलनों की आवश्यकता नहीं है; यह निश्चित रूप से उनका उपयोग कर सकता है, लेकिन वे किसी भी तरह से एक आवश्यकता नहीं हैं। अगर उनकी जरूरत होती, तो किसी और के स्पष्टीकरण से काम नहीं चलता। यह तथ्य (हाँ, एक तथ्य) कि आप संपूर्ण जावास्क्रिप्ट अनुप्रयोग लिख सकते हैं, जिसमें कुछ भी अर्धविराम नहीं है। इससे परे, मैं यह नहीं देखता कि कैसे समझ में आता है कि एक उपकरण कैसे काम करता है और निर्णय लेने के लिए किसी के स्वयं के तर्क का उपयोग करना "बस करने के विपरीत" किसी तरह से आपत्तिजनक है। यही धर्म के नाम से जाना जाता है।
रवेन्स्टाइन

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

@TimSeguine हाँ, इससे पहले कि मैं बेहतर समझ रखता, मैंने इसे वापस लिखा। मुझे अभी भी नहीं लगता कि यह उद्देश्यपूर्ण रूप से अर्धविराम का उपयोग न करने के लिए गलत है जब तक कि लोग ऐसा कर रहे हैं कि वास्तव में यह समझते हैं कि वे क्या कर रहे हैं। मुझे अपनी पोस्ट को फिर से काम करना चाहिए, या शायद इससे छुटकारा पाना चाहिए, क्योंकि इस बारे में अन्य लोगों ने बहुत कुछ किया है। विनम्र आलोचना के लिए धन्यवाद! :)
रेवेनस्टाइन

2

मेरे पास दो सिद्धांत हैं:

ए)

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

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

बी)

आलसी प्रोग्रामर अल्पावधि में अपने स्वयं के जीवन को आसान बनाने के लिए कुछ भी करेंगे। कम टाइपिंग -> कम प्रयास -> आसान। (भी, अर्धविराम के लिए नहीं होने से आपके दाहिने हाथ की अंगूठी-उंगली को दबाने से बचना होगा, कुछ आरएसआई से बचना)।

(नायब मैं कुछ है कि छोड़ते हुए के विचार से सहमत नहीं स्पष्ट रूप से दिखाता एक बयान)।


1
jshint अभी भी एक महत्वपूर्ण उपकरण है।
Raynos

एक कथन की \n;\n
अवहेलना करने के

2
@Raynos वास्तव में, मैंने पाया है कि JSLint कुछ फ्रेमवर्क-कोड की जटिलता के साथ थोड़ा बेकार हो जाता है, जिनके साथ मैं अक्सर काम करता हूं। साथ ही, \ n और \ n सभी परिस्थितियों में समान नहीं हैं , अन्यथा कभी भी इसकी आवश्यकता नहीं होगी;
एड जेम्स

7
jslint बेकार है, jshint एक अलग उपकरण है।
रेयानोस

0

मैं उन्हें बाहर नहीं छोड़ता, लेकिन जब उन्हें सम्मिलित करने के लिए नियम बदलते हैं।

ज्यादातर लोग जिन नियमों का उपयोग करते हैं

  • प्रत्येक पंक्ति समाप्त होने से पहले
  • }एक फ़ंक्शन स्टेटमेंट से आने के साथ लाइन को छोड़कर
  • लेकिन केवल एक फ़ंक्शन स्टेटमेंट, एक फ़ंक्शन शाब्दिक के लिए असाइनमेंट नहीं

मेरा नियम है: एक शुरुआती ब्रेस / ब्रैकेट के साथ शुरू होने वाली हर एक पंक्ति की शुरुआत में।

खदान सरल है, इसलिए पालन करने में आसान और बग से कम खतरा है। इसके अलावा अर्धविराम की कम संख्या इसे बाहर छोड़ने से बने बगों को ढूंढना आसान बनाती है।


एक और तर्क यह है कि कुख्यात return\nvalueबग एएसआई के बारे में नहीं जानता है। मेरा नियम आपको एएसआई के बारे में जानने के लिए मजबूर करता है, इसलिए मेरे नियम का उपयोग करने वाले लोग उस बग के जाल में गिरने की संभावना कम है।


0

बाइट की गिनती। आप देखें, दुर्भावनापूर्ण लोग आमतौर पर कोड की एक पंक्ति में इतना फिट होने की कोशिश करते हैं। तकनीकी रूप से, यह अर्ध-कॉलनों के बिना संभव नहीं होगा। मेरा तर्क यह है कि यह केवल एक प्रोग्रामेटिक आवश्यकता से अधिक सुरक्षा उपाय है। किसी भी तरह, यह XSS को काफी कम कर देगा जब यह एक सुझाव के बजाय एक आवश्यकता बन जाती है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.