2011-12-21 22 views
5

null के साथ एक चर की तुलना करने या null की तुलना में एक चर के साथ तुलना करने में कोई अंतर है?(ए! = नल) या (शून्य! = ए)

उदाहरण के लिए, कौन सा तुलना बेहतर है (a != null) या (null != a)? मैंने कहीं पढ़ा है कि दूसरा एक तेज़ है लेकिन इसके लिए कारण नहीं मिला।

+5

योड स्थितियां एफटीडब्ल्यू :) http://stackoverflow.com/questions/2349378/new-programming-jargon-you-coined (केवल 10k उपयोगकर्ताओं तक पहुंच योग्य लिंक) –

उत्तर

25

नहीं, कोई भी तेज़ नहीं है। यह एक सादा झूठ है। दूसरे संस्करण का उपयोग करने का कोई फायदा नहीं है। केवल पठनीयता को और भी खराब बनाते हैं।

यह सब सी है, जहां आप ग़लती से

if(x = 3) 
बजाय

if(x == 3) 

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

if(3 == x) 

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

+0

+1 एक अच्छी व्याख्या के लिए +1। – Rudy

+0

बहुत स्पष्ट रूप से समझाया, धन्यवाद! –

+0

दरअसल, वहां * एक गति अंतर है। परीक्षण 'शून्य == var' एक निर्देश धीमा है, क्योंकि शून्य को ढेर पर धक्का दिया जाना चाहिए। ज्यादा नहीं, लेकिन समान नहीं है। – Bohemian

0

नहीं, अब तक कोई अंतर नहीं है।

9

भले ही गति में अंतर था, तो मुझे उम्मीद है कि यह 99.99% ऐप्स में पूरी तरह से महत्वहीन होगा। जैसा कि है, मैं उम्मीद नहीं करता कि कोई गति अंतर होगा। व्यक्तिगत रूप से मुझे if (a != null) अधिक पठनीय लगता है - और अधिकतर मामलों में प्रदर्शन की तुलना में अधिक अधिक महत्वपूर्ण है।

+0

की देखभाल करने के लिए ऑप्टिमाइज़र का काम है, मुझे अच्छी तरह से 'शून्य! = ए' अधिक पठनीय, आदत का मामला शायद मिल सकता है :-) – aishwarya

+4

@ ऐश्वर्या: सी या सी ++ से विकसित एक आदत? तुलनात्मक रूप से रक्षात्मक तरीके से तुलना करने के लिए यह समझदारी हो सकती है (हालांकि आधुनिक कंपाइलर्स आकस्मिक असाइनमेंट, आईआईआरसी उठाते हैं) लेकिन मैं * विश्वास करता हूं * अधिकांश डेवलपर्स जिनके पास पृष्ठभूमि नहीं है जहां एक निश्चित लाभ है "परिवर्तनीय पहले" फ़ॉर्म अधिक पठनीय। –

+0

@ जॉनीएडमिट आप –

3

यह आमतौर पर तुलना करने के बजाय आकस्मिक काम को रोकने के लिए किया जाता है:

(a = null) //will not give error 

(null = a) //will give error 

मैं काफी यकीन है कि दक्षता का कोई कारण नहीं है, और अगर यह थे, एक अनुकूलक कोड बाइनरी में ही प्रस्तुत करना होगा।

+1

जीतते हैं हम जावा में यह गलती नहीं कर सकते हैं लेकिन सी/सी ++ –

+0

@ एच 3 एस मुझे समझ में नहीं आता है। –

+0

आह! मेरा मतलब था कि जावा कंपाइलर के कारण आपके दोनों कथन त्रुटिपूर्ण होंगे। 'अगर (ए = नल) 'कुछ सी/सी ++ कंपाइलर में बस ठीक है। –

0

वास्तव में नहीं, वास्तव में जावा में नहीं। पुराने दिनों में, सी हो सकता है, आप आकस्मिक रूप से विस्मयादिबोधक चिह्न भूल सकते हैं और कोड ठीक संकलित होगा। मूल रूप से, a = null को एक अभिव्यक्ति के रूप में लिया जाएगा जो शून्य को a पर नियुक्त किया गया है और हमेशा सत्य का मूल्यांकन करता है (क्योंकि असाइनमेंट सफल था)।

आज के कंपाइलर कहीं अधिक मजबूत हैं। हालांकि, पुरानी आदतें मर जाती हैं और मैं अभी भी null != a लिखता हूं :-)

+0

वार्तालाप में इतनी देर हो जाने के लिए खेद है, लेकिन आपकी अभिव्यक्ति "एक अभिव्यक्ति जो 'शून्य' को निष्क्रिय करती है और हमेशा सत्य का मूल्यांकन करती है (क्योंकि असाइनमेंट सफल था)" सही नहीं है। यह शून्य के मूल्य का मूल्यांकन करता है (इसलिए शून्य होने पर यह गलत हो सकता है)। –

4

स्ट्रिंग के साथ संचालन करते समय आप चर के पहले केवल एक शाब्दिक उपयोग करना चाहते हैं।

if("abcd".equals(name)) एक NPE जहां के रूप में if(name.equals("abcd")) करता फेंक नहीं है सब name पर अगर null होने के लिए गए थे।

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