2012-05-18 14 views
7

संभव डुप्लिकेट:
A==B vs B==A, What are the differencesक्या i == 0 और 0 == i के बीच कोई अंतर है?

पहले कोड:

if(i==0) {// do instructions here} 

दूसरा कोड:

if(0==i) { // do instructions here } 

diffe क्या है ब्लॉक के बीच किराए पर?

+7

कोई आपको समय डिबगिंग खर्च नहीं करेगा क्योंकि आप '=' भूल गए हैं। – alex

+0

... किस भाषा के संदर्भ में? –

+3

यदि आप सी # का उपयोग कर रहे हैं, तो आप कम से कम 'if (i = 0) {} 'समस्या से सुरक्षित हैं, क्योंकि यह वाक्यविन्यास अवैध है। –

उत्तर

28

कार्यात्मक रूप से, कोई अंतर नहीं है।
कुछ डेवलपर असाइनमेंट टाइपो से बचने के लिए दूसरे प्रारूप को लिखना पसंद करते हैं (यदि आप = याद करते हैं), ताकि कंपाइलर टाइपो की चेतावनी दे।
दूसरा प्रसिद्ध रूप से Yoda Condition के रूप में जाना जाता है।

Yoda Condition

मैं कहता हूँ, क्योंकि तुम अपने आप को हर मामूली विस्तार से बचाव नहीं कर सकते और संकलक पर भरोसा करते हैं you.If के लिए जोर से चिल्ला करने के लिए आप एक == लिखने का इरादा आप अपने आप को एक लिखने के लिए उम्मीद करनी चाहिए कोई अंतर नहीं है == और = नहीं।
दूसरे प्रारूप का उपयोग करके कुछ अस्पष्ट गैर-पठनीय कोड की ओर जाता है।
इसके अलावा, मुख्य धारा compilers के सबसे द्वारा emitting an warningकाम बजाय समानता टाइपो की चेतावनी एक बार आप सभी चेतावनियों सक्षम (जो आपको चाहिए वैसे भी)।

+3

बहुत बुरा है, उन्होंने [शब्दकोष प्रश्न] पर ऐतिहासिक लॉक नहीं लगाया (http://stackoverflow.com/questions/2349378/new-programming -जर्गन-आप-निर्मित) –

+0

+1 योड कंडीशन और पोकेमोन अपवाद हैंडलिंग के लिए +1। पहले उन शर्तों को कभी नहीं सुना। –

+0

@ कॉनराडफ्रिक्स: न केवल इसे लॉक किया गया है, इसे हटा दिया गया है और अब केवल 10k + उपयोगकर्ता इसे देख सकते हैं। –

7

दूसरा संस्करण सुरक्षित होना चाहिए।

यदि आप एक समान चिह्न भूल जाते हैं, तो यह शून्य के मान को शून्य में नहीं बदलता है।

0

सी # में कोई अंतर नहीं है। हालांकि सी ++ में प्रदर्शन में एक अंतर था, यही कारण है कि आप दोनों इन दिनों सी # कोड में उपयोग करते हैं - वास्तव में मैं प्रदर्शन के बारे में i ++ बनाम ++ के बारे में सोच रहा हूं - 0 == मैं सी/सी ++ में एक सामान्य कोडिंग अनुशंसा करता हूं एक आकस्मिक ऑपरेशन के रूप में i = 0 से बचें

1

जब आप लिखते हैं (0 == i) गलती से संकेत के बराबर बराबर उपयोग करने की त्रुटि (उदाहरण के लिए) अगर (i = 0) समाप्त हो जाती है। और कुछ नहीं।

1

कोई अंतर नहीं, कुछ लोगों के बजाय समानता परीक्षण के असाइनमेंट (=) करने का आम गलती को पकड़ने के लिए एक दूसरे को पसंद करते हैं (==)

0 = i संकलन

5

कार्यात्मक पर विफल हो जाएगा, वे कर रहे हैं सी में वही; मैं अन्य भाषाओं के बारे में निश्चित नहीं हूं जहां ऑपरेटर ओवरलोडिंग जैसी बदसूरत चीजें खेल में आती हैं।

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

+1

ऑपरेटर ओवरलोडिंग सुंदर है! (जब सही ढंग से लागू किया जाता है।) यह उन चीज़ों में से एक है जिन्हें मैं बार-बार सी ++ के बारे में पसंद करता हूं। – leemes

2

सी ++ के लिए, यह संभव है, हालांकि, यह संभव नहीं है कि एक अंतर हो सकता है। यह इस बात पर निर्भर करता है कि मैं किस प्रकार का हूं। जैसे

struct Foo 
{ 
    int x; 
}; 

bool operator==(Foo lhs, int rhs) 
{ 
    return lhs.x == rhs; 
} 

bool operator==(int lhs, Foo rhs) 
{ 
    std::cout << "Hi!"; 
    return true; 
} 

कोई भी जो इस तरह कोड लिखता है उसे गोली मार दी जानी चाहिए।

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