2017-04-27 6 views
5

कुछ लोग विधि 2null -check के लिए अनुशंसा करते हैं, लेकिन मुझे यकीन नहीं है कि इसके पीछे क्या कारण है और इसे क्यों प्राथमिकता दी जानी चाहिए?शून्य की जांच करने का सबसे अच्छा तरीका?

Date test1 = null; // test1 can be any object like String instead of Date 
if (test1 != null) { 
    System.out.println("Test"); 
} 

विधि 2: -

Date test1 = null; 
if (null != test1) { 
    System.out.println("Test"); 
} 
+0

पोस्ट के विवरण में देखें http://stackoverflow.com/questions/10983573/checking-for-null-what-order विधि 2 बेहतर होने का कारण यह है कि जब आप गायब हो जाते हैं तो आपको एक कंपाइलर त्रुटि मिलती है एक "="। –

+4

@ रेनेम। लेकिन हम यहां जावा के बारे में बात कर रहे हैं। यहां तक ​​कि 'अगर (test = null)' एक कंपाइलर त्रुटि देगा क्योंकि यह एक बुलियन नहीं है ... – Imus

+0

@ReneM। यह एक असमान जांच है यदि आप बराबर चिह्न भूल जाते हैं तो आपको 'test1 मिलता है! शून्य ' – Jens

उत्तर

3

जावा 7 ऐसे requireNonNull() के रूप में अच्छी छोटी सहायक तरीकों के साथ शुरू की java.lang.Objects। जावा 8 ने कुछ और जोड़ा, खासकर isNull() और nonNull()। वे धारा() संचालन के लिए इस्तेमाल किया जाना था; लेकिन निश्चित रूप से, वे उस परिदृश्य तक ही सीमित नहीं हैं।

तो, एक वैकल्पिक विकल्प ऐसे निर्णय लेने के लिए उन नए तरीकों पर निर्भर होना होगा। संक्षिप्त, पठनीय, "मानक; और आपको जगह पर अपनी खुद की जांच दोहराने से रोकता है। और शून्य और मौका देने का शून्य मौका। बेशक, एक और विधि कॉल करने से न्यूनतम ओवरहेड। हाथ पर: यदि आपकी विधि को बुलाया जाता है लाखों बार - यह वैसे भी JIT'ed होगा; और फिर इस तरह के छोटे तरीकों को आसानी से रेखांकित किया जा सकता है।

+0

निश्चित रूप से, मेरे पास जवाब के साथ कोई गोमांस नहीं था। – Kayaman

+1

फिर भी: आपके मूल्यवान फीडबैक के लिए धन्यवाद। 250 प्रतिनिधि प्रत्येक के साथ 3 दिनों के बाद; मैं हाल ही में किसी भी महत्वपूर्ण जवाब नीचे नहीं मिल सकता है। तो मैं कम से कम उन लोगों के साथ पूर्णता के लिए प्रयास करता हूं जो मुझे शुरुआत में अर्ध-दाएं मिलते हैं ... उम्मीद करते हैं कि कुछ "बेहतर" प्रश्न कुछ बिंदु पर फिर से दिखाई देते हैं ;-) – GhostCat

-1

इसके लिए कुछ व्यावहारिक कारण हैं। पहला सी से सी है:

if(x = NULL) { ... } 

... (कृपया ध्यान एकल =) एक गलती कुछ डेवलपर्स गलती कर सकता है है।

if(NULL = x) { ... } 

... एक संकलक त्रुटि का कारण बनता है। तो अगर आप पहले null डालने की आदत में हैं, तो यह गलती करना मुश्किल है।

हालांकि इस तर्क != पर लागू नहीं होता है, तो एकमात्र कारण डाल null पहले स्थिरता के लिए है जारी रखने के लिए।

... और जावा if(x = null) में एक कंपाइलर त्रुटि भी है क्योंकि जावा किसी मान में असाइनमेंट का मूल्यांकन नहीं करता है।

एक और स्थिति है जिसमें "उम्मीद" डालने से पहले "वास्तविक" आम है है, और वह यह है कि:,

if("expected string".equals(string)) { ... } 

क्योंकि "expected string" निश्चित रूप से null नहीं है इस NullPointerException जब string == null नहीं कर सकते हैं, जबकि string.equals("expected string") होगा।

तो, कुछ प्रोग्रामर पहले अपेक्षित मूल्य डालने की आदत में आते हैं।

मेरी अपनी पसंद किसी ऐसी चीज के लिए है जो अंग्रेजी वाक्य के समान पढ़ती है, और मेरे लिए: if(x == null) उस सम्मान में बेहतर है।

छोटी सी चीजें और टाइपो पकड़ने के लिए हम जो कुछ चाल करते थे, उन्हें पहले स्थान पर नल से बचकर और final चर के उचित उपयोग से यूनिट-परीक्षण आदतों द्वारा कम आवश्यक किया जाता है।

+0

1. 'if (x = null) 'भी एक त्रुटि प्राप्त करें जावा में 2. ओपी का वैरिएबल एक तारीख है जो स्ट्रिंग – Jens

+0

@ जेन्स 1 नहीं है। यह पहले से संपादित किया गया है कि यह एक सी आदत है जिसे आगे बढ़ाया गया है। 2. मुद्दा यह है कि स्ट्रिंग मुहावरे प्रोग्रामर में आदतों की ओर जाता है - और तकनीक किसी ऑब्जेक्ट प्रकार पर लागू होती है। – slim

+0

और कैसे 2. ओपी के प्रश्न के लिए काम करता है: 'अगर (शून्य! = Test1) {' – Jens

2

यहां कोई वास्तविक अंतर नहीं है। दोनों स्थितियां एक ही तरह से काम करेंगे।चर्चा सबसे अधिक संभावना Yoda conditions से आया है, जहां हम लिखें:

null   ==   temp1 
literal comparison variable 

जो बजाय == (तुलना) की = (असाइनमेंट ऑपरेटर) लिखने की गलती कर से रोकता है जब हम if (foo = 42) की तरह कोड लग सकती है जो कुछ भाषाओं compiles में ठीक है तर्कसंगत त्रुटियों को संभवतः खोजने के लिए मुश्किल (विशेष रूप से नौसिखिया प्रोग्रामर द्वारा)।

लेकिन आपके मामले में आपको उस निर्माण का उपयोग करने की आवश्यकता नहीं है। उस के लिए कम से ऐसा न हो कि दो कारण हैं: आप != नहीं == उपयोग कर रहे हैं

  1. , इसलिए वहाँ बहुत कम संभावना है कि आप के बजाय केवल =!=
  2. जावा if (expression) में expressionboolean मान देने के लिए उम्मीद लिखना होता है , इसलिए यदि गलती से आप = null लिखते हैं तो संकलित नहीं करेगा क्योंकि अभिव्यक्ति null वापस आ जाएगी। यह हमें ऐसे टाइपो के साथ कोड चलाने से रोकता है।

    योदा जावा में हालत केवल boolean भाव if (stop == true) तरह के लिए समझ में आता है, लेकिन फिर भी तो बजाय if (true == stop) लिखने की हम बस == true (या ==false) भाग को छोड़ना चाहिए, क्योंकि हम पहले से ही बूलियन मान है। तो हमें इसके बजाय if (stop) या if (!stop) लिखना चाहिए।

ऐसी शैली का प्रयोग भावना है जब आप अलग अलग भाषाओं में प्रोग्रामिंग कर रहे हैं बनाता है और आप एक शैली है जो एक भाषा में और एक ही समय में मदद करता है का उपयोग करते हुए अन्य भाषाओं में समस्याओं का कारण नहीं है (यहां तक ​​कि अपने जीवन को आसान बनाने के लिए चाहते हैं अगर यह वास्तव में आवश्यक नहीं है)।

फिर भी यह जानना उचित है कि निर्माण/शैली सहायक या आवश्यक है और जहां यह नहीं है क्योंकि प्रत्येक भाषा में other answerObjects.nonNull में पहले से ही उल्लेख किए गए मामले को संभालने का बेहतर तरीका हो सकता है।

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