2011-09-05 16 views
9

मैंने देखा है कि कई लूप और वृद्धि में। I ++ करने के बजाय वे करते हैं I = = 1. यह क्यों है?लोग i ++ के बजाय i = i + 1 का उपयोग क्यों करते हैं?

+0

क्यों शीर्षक से अलग में अपने प्रश्न है शरीर में सवाल? आपसे पूछने का क्या मतलब है? –

+0

मैं 'i + = 1' का उपयोग करता हूं, फॉर-लूप की तीसरी स्थिति को छोड़कर, जिसमें मैं' i ++ 'का उपयोग करता हूं। –

उत्तर

9

सभी भाषाओं में ++ ऑपरेटर (पायथन, एक के लिए) नहीं है ... शायद ये लोग उन भाषाओं में से एक में पृष्ठभूमि से आते हैं। कुछ लोगों को लगता है कि i++ बहुत स्पष्ट नहीं है, खासकर जब से कुछ भाषाएं i++ और ++i अलग-अलग हैं।

+7

प्रत्येक भाषा जिसे मैं जानता हूं 'i ++' और '++ i' अलग-अलग तरीके से व्यवहार करता है: अभिव्यक्ति का मूल्य।दूसरे शब्दों में, 'x = i ++; 'x = ++ i' की तुलना में एक मान को' x' से कम मानता है। क्या यह आपके मन में था? मैं "कुछ" शब्द के उपयोग के बारे में उत्सुक हूं; क्या आप उन भाषाओं के बारे में जानते हैं जिनमें उपसर्ग और पोस्टफिक्स वृद्धि ऑपरेटर दोनों हैं और यह भेद नहीं करते हैं? –

+1

@ टेड हॉप पर्ल एक पूर्व या पोस्ट वृद्धि के आधार पर या तो * मूल्य * या * संदर्भ * वापस कर देगा। इससे परेशान व्यवहार हो सकता है। मूल रूप में यह कोई मुद्दा नहीं है। यह 'foo ($ x, ++ $ x)' के मामलों में बहुत परेशान है, हालांकि (मूल्यांकन अभी भी बाएं से दाएं होता है)। इसके अलावा, सी/सी ++ में परिवर्तनीय संशोधनों (++/-) के साथ यूबी का बहुत कुछ है और दो अनुक्रम बिंदुओं के बीच पहुंच है। –

+1

ब्राउजर आईई 10 (और शायद <10 साथ ही) के लिए जावास्क्रिप्ट में i ++ i + = 1 से 15% * धीमा * है। इस प्रकार मैं हमेशा i + = 1 का उपयोग करना पसंद करता हूं, सिर्फ इसलिए कि यह तेज़ और अर्थात् यह व्यावहारिक रूप से वही अधिकार है। – Yeti

14

व्यक्तिगत वरीयता और शैली।

3

अतिरिक्त शिल्प को रोकता है। क्रॉकफोर्ड का कहना है कि कम से कम यही है।

+2

हालांकि, चालाक कोड "++" के बिना चालाक होगा और साफ कोड "++" के साथ साफ कोड होगा। –

2

i = i + 1 अंग्रेजी में डीकोड करना आसान है। i++ हालांकि शुरुआती सही अनुवाद नहीं करते हैं जब शुरुआती कोड पढ़ रहे हैं। प्रोग्रामर शायद अपने कोड को शुरुआती लोगों द्वारा अधिक पठनीय बनाने की कोशिश कर रहा था, या शायद सिंटैक्स के बारे में अत्यधिक चिंतित होने की कोशिश नहीं कर रहा था। कोई अच्छा एक दूसरे का उपयोग करने का कारण नहीं है।

0

कुछ लोगों को i = i + 1 या i += 1i++ से अधिक वर्णनात्मक लगता है। यह सिर्फ कोडिंग शैली और पठनीयता की बात है। अधिकांश मौजूदा भाषाओं में अलग-अलग तरीकों के बीच कोई प्रदर्शन अंतर नहीं होता है।

++ और -- ऑपरेटरों के साथ कुछ पठनीयता समस्या नहीं है, लेकिन वह ज्यादातर जब वे अन्य ऑपरेटरों के साथ उपयोग किया जाता है है, यह वास्तव में एक समस्या नहीं है, जब वे खुद से किया जाता है। उदाहरण के लिए ++x+-++y+-z++ जैसी अभिव्यक्ति पूरी तरह से मान्य है, लेकिन यह देखना मुश्किल है कि यह वास्तव में क्या करता है। चूंकि ऑपरेटर कुछ मामलों में पठनीयता के मुद्दों का कारण बनते हैं, कुछ महसूस करते हैं कि उन्हें हमेशा से बचा जाना चाहिए।

+0

हालांकि यह एक चरम है। जबकि मैं '+ =' '++ 'को प्राथमिकता देता हूं, अच्छा कोड अच्छा कोड होता है और खराब कोड खराब कोड होता है:' ++ x + - ++ y + -z ++ 'अच्छा कोड नहीं है,' ++ 'अलग है। उदाहरण के लिए, कल्पना करें कि 'i ++' (या यहां तक ​​कि '++ i') का उपयोग करने के लिए "नियम" केवल "एक कथन संदर्भ में है"। यह "नियम" से अलग नहीं है जो 'x = i = i + 1' या ऐसे अन्य monstrosities के उपयोग को प्रतिबंधित करता है। –

+0

@pst: बेशक यह खराब कोड है, उदाहरण के साथ बिंदु यह प्रदर्शित करना था कि ऑपरेटरों को अपठनीय कोड लिखने के लिए उपयोग किया जा सकता है। – Guffa

3

सामान्य कारण यह है कि अलग ढंग से व्यवहार

var i = 0; 
1 == ++i // true 

और

var i = 0; 
1 == i++; // false 

++i "वेतन वृद्धि मैं, तो का मूल्यांकन करने के लिए" i++ करने के लिए अनुवाद करते हुए तब्दील वेतन वृद्धि के दो विभिन्न संस्करणों देखते हैं कि है "मेरा मूल्यांकन, फिर वृद्धि"

जब आप इन अभिव्यक्तियों को i = i + 1; के रूप में लिखते हैं तो यह स्पष्ट होता है कि प्रोग्रामर का उद्देश्य कोड में बग ढूंढना और आसान था। यह इसी कारण से लोगों को लिखने "योदा खंड" की तरह

if(6 == x){ 
    //. . . 
} 

यह आसान है गलती को पकड़ने के लिए है, तो आप गलती से

if(6 = x){ 
    //. . . 
} 

करते हैं, क्योंकि

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