मैंने देखा है कि कई लूप और वृद्धि में। I ++ करने के बजाय वे करते हैं I = = 1. यह क्यों है?लोग i ++ के बजाय i = i + 1 का उपयोग क्यों करते हैं?
उत्तर
सभी भाषाओं में ++
ऑपरेटर (पायथन, एक के लिए) नहीं है ... शायद ये लोग उन भाषाओं में से एक में पृष्ठभूमि से आते हैं। कुछ लोगों को लगता है कि i++
बहुत स्पष्ट नहीं है, खासकर जब से कुछ भाषाएं i++
और ++i
अलग-अलग हैं।
प्रत्येक भाषा जिसे मैं जानता हूं 'i ++' और '++ i' अलग-अलग तरीके से व्यवहार करता है: अभिव्यक्ति का मूल्य।दूसरे शब्दों में, 'x = i ++; 'x = ++ i' की तुलना में एक मान को' x' से कम मानता है। क्या यह आपके मन में था? मैं "कुछ" शब्द के उपयोग के बारे में उत्सुक हूं; क्या आप उन भाषाओं के बारे में जानते हैं जिनमें उपसर्ग और पोस्टफिक्स वृद्धि ऑपरेटर दोनों हैं और यह भेद नहीं करते हैं? –
@ टेड हॉप पर्ल एक पूर्व या पोस्ट वृद्धि के आधार पर या तो * मूल्य * या * संदर्भ * वापस कर देगा। इससे परेशान व्यवहार हो सकता है। मूल रूप में यह कोई मुद्दा नहीं है। यह 'foo ($ x, ++ $ x)' के मामलों में बहुत परेशान है, हालांकि (मूल्यांकन अभी भी बाएं से दाएं होता है)। इसके अलावा, सी/सी ++ में परिवर्तनीय संशोधनों (++/-) के साथ यूबी का बहुत कुछ है और दो अनुक्रम बिंदुओं के बीच पहुंच है। –
ब्राउजर आईई 10 (और शायद <10 साथ ही) के लिए जावास्क्रिप्ट में i ++ i + = 1 से 15% * धीमा * है। इस प्रकार मैं हमेशा i + = 1 का उपयोग करना पसंद करता हूं, सिर्फ इसलिए कि यह तेज़ और अर्थात् यह व्यावहारिक रूप से वही अधिकार है। – Yeti
व्यक्तिगत वरीयता और शैली।
अतिरिक्त शिल्प को रोकता है। क्रॉकफोर्ड का कहना है कि कम से कम यही है।
हालांकि, चालाक कोड "++" के बिना चालाक होगा और साफ कोड "++" के साथ साफ कोड होगा। –
i = i + 1
अंग्रेजी में डीकोड करना आसान है। i++
हालांकि शुरुआती सही अनुवाद नहीं करते हैं जब शुरुआती कोड पढ़ रहे हैं। प्रोग्रामर शायद अपने कोड को शुरुआती लोगों द्वारा अधिक पठनीय बनाने की कोशिश कर रहा था, या शायद सिंटैक्स के बारे में अत्यधिक चिंतित होने की कोशिश नहीं कर रहा था। कोई अच्छा एक दूसरे का उपयोग करने का कारण नहीं है।
कुछ लोगों को i = i + 1
या i += 1
i++
से अधिक वर्णनात्मक लगता है। यह सिर्फ कोडिंग शैली और पठनीयता की बात है। अधिकांश मौजूदा भाषाओं में अलग-अलग तरीकों के बीच कोई प्रदर्शन अंतर नहीं होता है।
++
और --
ऑपरेटरों के साथ कुछ पठनीयता समस्या नहीं है, लेकिन वह ज्यादातर जब वे अन्य ऑपरेटरों के साथ उपयोग किया जाता है है, यह वास्तव में एक समस्या नहीं है, जब वे खुद से किया जाता है। उदाहरण के लिए ++x+-++y+-z++
जैसी अभिव्यक्ति पूरी तरह से मान्य है, लेकिन यह देखना मुश्किल है कि यह वास्तव में क्या करता है। चूंकि ऑपरेटर कुछ मामलों में पठनीयता के मुद्दों का कारण बनते हैं, कुछ महसूस करते हैं कि उन्हें हमेशा से बचा जाना चाहिए।
हालांकि यह एक चरम है। जबकि मैं '+ =' '++ 'को प्राथमिकता देता हूं, अच्छा कोड अच्छा कोड होता है और खराब कोड खराब कोड होता है:' ++ x + - ++ y + -z ++ 'अच्छा कोड नहीं है,' ++ 'अलग है। उदाहरण के लिए, कल्पना करें कि 'i ++' (या यहां तक कि '++ i') का उपयोग करने के लिए "नियम" केवल "एक कथन संदर्भ में है"। यह "नियम" से अलग नहीं है जो 'x = i = i + 1' या ऐसे अन्य monstrosities के उपयोग को प्रतिबंधित करता है। –
@pst: बेशक यह खराब कोड है, उदाहरण के साथ बिंदु यह प्रदर्शित करना था कि ऑपरेटरों को अपठनीय कोड लिखने के लिए उपयोग किया जा सकता है। – Guffa
सामान्य कारण यह है कि अलग ढंग से व्यवहार
var i = 0;
1 == ++i // true
और
var i = 0;
1 == i++; // false
++i
"वेतन वृद्धि मैं, तो का मूल्यांकन करने के लिए" i++
करने के लिए अनुवाद करते हुए तब्दील वेतन वृद्धि के दो विभिन्न संस्करणों देखते हैं कि है "मेरा मूल्यांकन, फिर वृद्धि"
जब आप इन अभिव्यक्तियों को i = i + 1;
के रूप में लिखते हैं तो यह स्पष्ट होता है कि प्रोग्रामर का उद्देश्य कोड में बग ढूंढना और आसान था। यह इसी कारण से लोगों को लिखने "योदा खंड" की तरह
if(6 == x){
//. . .
}
यह आसान है गलती को पकड़ने के लिए है, तो आप गलती से
if(6 = x){
//. . .
}
करते हैं, क्योंकि
- 1. 'int i = i;' क्यों है कानूनी?
- 2. 'i i xrange (len (x))'
- 3. DataReader [i] बनाम DataReader.GetValue (i) बनाम DataReader.GetString (i)
- 4. आप रेपा में एक [i] = f (a [i-1]) की गणना कैसे करते हैं?
- 5. क्या inc (i) और i: = i + 1 डेल्फी में एक प्रदर्शन अंतर है?
- 6. bash set -e और i = 0; i ++ सहमत नहीं हैं
- 7. सी ++ में, जो तेज़ है? (2 * i + 1) या (i << 1 | 1)?
- 8. "i: = i + 1" इंटीग्रर्स और बड़े प्रकार के लिए रेंज-चेक त्रुटि क्यों नहीं देता है?
- 9. i Python
- 10. जावा में, मैं i ++++ या (i ++) ++ क्यों नहीं लिख सकता?
- 11. "(? I)" उच्चारण
- 12. document.body.appendChild (i)
- 13. ffmpeg -i
- 14. वस्तुओं के लिए कोई फायदा। GetObject (i) वस्तुओं पर [i]?
- 15. सी मानक I/O बनाम यूनिक्स I/O मूल बातें
- 16. हास्केल: अक्षर 'i'
- 17. गैर-अवरुद्ध (घटना संचालित I/O) बनाम अवरुद्ध I/O
- 18. Google I/O
- 19. "i; 16" छवि फ़ाइल
- 20. फ़ाइल I/O
- 21. i ++ ++ i से कम कुशल, यह कैसे दिखाना है?
- 22. मार्शलिंग स्ट्रीम में अमान्य एन्कोडिंग: I "◄co OR [I" co]
- 23. रूबी में ऋणात्मक लूप को कैसे लिखना है (i = index; i> = 0; i -)
- 24. जावा I/O स्ट्रीम
- 25. Arduino I²C स्टार्टअप
- 26. Autoboxing: तो मैं लिख सकता हूँ: इंटीजर i = 0; इसके बजाय: इंटीजर i = नया इंटीजर (0);
- 27. इसका क्या अर्थ है? int i = (i = 20);
- 28. ++ i ऑपरेटर पायथन
- 29. अपाचे कॉमन्स I/O
- 30. लिनक्स I/O शेड्यूलर
क्यों शीर्षक से अलग में अपने प्रश्न है शरीर में सवाल? आपसे पूछने का क्या मतलब है? –
मैं 'i + = 1' का उपयोग करता हूं, फॉर-लूप की तीसरी स्थिति को छोड़कर, जिसमें मैं' i ++ 'का उपयोग करता हूं। –