2010-07-13 15 views
13

संभव डुप्लिकेट:
Why avoid increment (“++”) and decrement (“--”) operators in JavaScript?हमें जावास्क्रिप्ट में ++ का उपयोग क्यों नहीं करना चाहिए?

मैं कुछ स्थानों है कि यह ++ & उपयोग करने के लिए अनुशंसित नहीं है में सुना है - जावास्क्रिप्ट में, और हम का उपयोग करना चाहिए + = 1 या - = 1 इसके बजाए। क्या कोई मेरे लिए स्पष्टीकरण दे सकता है?

+4

उन्हें एक ही चीज़ के रूप में व्याख्या किया जाता है। आपने इसे कहां सुना? –

+2

जेएसलिंट जेसन की शिकायत करेगा। – tbranyen

+2

क्रॉकफ़ोर्ड, लगभग निश्चित रूप से। –

उत्तर

36

क्योंकि डगलस Crockford कैसे भ्रामक कुछ है या नहीं भी हो सकती है की अपनी राय है। वे उपयोग करने के लिए ठीक हैं, जेएसलिंट सिर्फ अपनी राय पेश कर रहा है।

+0

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

+1

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

+1

श्वास। क्रॉकफोर्ड के पास जवाब देने के लिए * बहुत * है, मेरी इच्छा है कि लोग सुसमाचार के रूप में अपनी राय नहीं लेंगे ... – annakata

2

एकमात्र अच्छा कारण मैं सोच सकता हूं स्पष्टता है। आप निम्न स्थिति के बारे में चिंता करने की ज़रूरत नहीं है:

var result = ++i; 

या:

var result = i++; 
+6

उन चीजों का कभी भी उपयोग न करें जिन्हें आप समझ में नहीं आते हैं। कृपया उन चीज़ों का उपयोग करें जिन्हें आप समझते हैं! (वही बात 'ब्रेक', 'जारी रखें' पर लागू होती है, डेल्फी की 'साथ' और अन्य सभी चीजें जिनके बारे में हमने पिछले कुछ हफ्तों में तर्क दिया है।) –

+0

@ एंड्रियास, इस तरह की चीजें _sound_ अच्छी है, लेकिन हकीकत में, कितने पेशेवर प्रत्येक अमूर्त परत के माध्यम से देखने और क्वांटम भौतिकी से जीयूआई के लिए एक प्रणाली को समझने के लिए सीख सकते हैं? मुझे विश्वास है कि हर किसी को अमूर्तता की परत के संचालन मॉडल के विवरण जानने के लिए प्रयास करना चाहिए, जिस पर वे काम करते हैं। मैं कहता हूं "प्रयास करें" क्योंकि आम तौर पर यह जानने का कोई तरीका नहीं है कि जब आप वास्तव में एक अमूर्त परत के ऑपरेशन मॉडल के हर विवरण को समझते हैं। –

+0

@ एंड्रियास एक मजबूत सिद्धांत है - कभी भी उन चीज़ों का उपयोग न करें जो आपके द्वारा या दूसरों द्वारा गलत समझा जा सके। '++ i' और' i ++ 'के बीच का अंतर एक प्रमुख उदाहरण है। –

16

कोई भी दिमाग अगर मैं विपरीत सुझाव देता हूं ...?

कृपया जब आप कर सकते हैं तो वृद्धि (++) और कमी (-) ऑपरेटर का उपयोग करें। अधिक सरल। (और यही वह है जो वे वहां हैं।)

+1

सहमत हुए। क्यों * नहीं होना चाहिए * हम कुछ अधिक सुविधाजनक भाषा तत्वों का उपयोग करते हैं जो सी सिंटैक्स को पहले स्थान पर इतना ठंडा करते हैं? – Robusto

+1

नहीं कि मैं '++ '/' --' को ध्यान में रखता हूं, मैं उन्हें हर समय उपयोग करता हूं। तथापि। मुझे यकीन नहीं है कि मैं * वास्तव में * उन्हें अधिक सरल कह सकता हूं। 'var c = a ++ + b' और 'var c = a +++ b' पर विचार करें। * सभी तीन * चर के पास अलग-अलग मान होंगे, जहां आप रिक्त स्थान रखते हैं, यहां, जो 'var c = a +++ b' –

+2

@ डेविड हेडलंड - सत्य की गलत व्याख्या करने की संभावना के लिए खुलता है। संभावित भ्रम है। हालांकि, वेतन वृद्धि ऑपरेटर बढ़ने का मतलब है। इसका उद्देश्य जितना सरल हो उतना सरल है। '+ = 1' या' = var + 1' का उपयोग करने से मुझे x + x करना पसंद है जब आप x * 2. के बजाय कुछ डबल करना चाहते हैं। कोड का मतलब क्या है। – froadie

4

एकमात्र कारण मैं सोच सकता हूं, यह है कि आपके जावास्क्रिप्ट को आपके द्वारा लिखे गए किसी अन्य कोड (एचटीएमएल ??) की तुलना में मूर्खता से संपादित किया जा सकता है।

तो एक noob के लिए,

x=x+1 ; 

अधिक पठनीय से

x++; 

जब अनुभवी प्रोग्रामर के साथ काम कर, यह वास्तव में कोई फर्क नहीं पड़ता है।

7

एकमात्र बार मैंने इन ऑपरेटरों को निराश देखा, Douglas Crockford'sJavaScript: The Good Parts पुस्तक में था।

परिशिष्ट "बैड पार्ट्स" से हवाला देते हुए:

वेतन वृद्धि और घटती ऑपरेटरों के लिए यह संभव है एक अत्यंत संक्षिप्त शैली में लिखने के लिए बनाते हैं।

for (p = src, q = dest; !*p; p++, q++) *q = *p; 

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

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

इसके अलावा, JSLint documentation (कोड गुणवत्ता उपकरण है जिसमें उन्होंने लिखा है) से उद्धृत:

++ (वेतन वृद्धि) और -- (घटती) ऑपरेटरों द्वारा बुरा कोड में योगदान करने के लिए जाने जाते हैं अत्यधिक चालबाजी को प्रोत्साहित करना। वायरस और अन्य सुरक्षा पुरुषों को सक्षम करने में वे केवल दोषपूर्ण वास्तुकला के लिए दूसरे स्थान पर हैं। एक प्लसप्लस विकल्प है जो इन ऑपरेटरों के उपयोग को प्रतिबंधित करता है।

वह वास्तव में इन ऑपरेटरों को पसंद नहीं करता है ... लेकिन चलो! मुझे लगता है कि हम अभी भी ++ और -- ऑपरेटरों को क्रिप्टिक कोड लिखने के बिना उपयोग कर सकते हैं। मैं उनका उपयोग करता हूं, और मुझे उन्हें पसंद है। हर कोई उनका उपयोग करता है।

ध्यान दें कि हालांकि JSLint में इन ऑपरेटरों को अस्वीकार करने का विकल्प है, यह विकल्प डिफ़ॉल्ट रूप से सक्षम नहीं है।

+6

अच्छी तरह से कहा। ऐसा लगता है कि क्रॉकफोर्ड अपने पैर में छेद के लिए बंदूक को दोषी ठहरा रहा है। या हो सकता है कि वह स्ट्रॉ मैन था जिसने इसे किया ... – annakata

+0

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

7

कारण क्रॉकफोर्ड एट अल। ++/-- के उपयोग को हतोत्साहित करता है कि वे साइड इफेक्ट्स पेश करते हैं। i++; के बजाय i+=1; का उपयोग करने का कोई कारण नहीं है क्योंकि दोनों एकल कथन हैं, लेकिन बयान देने के कई कारण हैं केवल एक ही चीज़ और ++ उस नियम का उल्लंघन करना आसान बनाता है।

++ का उपयोग करने का अर्थ है कि हमें अपने सिर में i++ और ++i के बीच भेद रखने की आवश्यकता नहीं है। इसका मतलब है कि हम चालाक लेकिन भ्रमित तरीकों से उनका उपयोग करने की कोशिश करने की संभावना कम हैं। उन कारणों से उनका उपयोग न करने का अच्छा अभ्यास है, इमो।

0

++ का उपयोग करें, मानक है और वहां होने की अच्छी स्थिति है।

3

++/-- का उपयोग जेएस न्यूनीकरण विकल्पों को प्रतिबंधित कर सकता है, क्योंकि उनका अर्थ व्हाइटस्पेस के प्रति बहुत संवेदनशील है। मिनीफायर के आधार पर, यह कार्य कोड में त्रुटियों को भी पेश कर सकता है। क्रॉकफोर्ड बताता है (सावधानी अनुभाग में) here

+1

एक मिनीफायर का उपयोग न करें जो इसे कम करने वाले कोड को समझ में नहीं आता है। –

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

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