शून्य घोषित करने के विरोध में एक सफल संचालन को इंगित करने के लिए एक विधि हस्ताक्षर में लौटने वाले बूलियन के संबंध में कोई कठोर और तेज़ नियम हैं? मुझे लगता है कि मेरी कॉलिंग विधि में अधिक महत्वपूर्ण संचालन के लिए मैं जानना चाहता हूं कि कोई ऑपरेशन पूरा हुआ है, इसलिए मैं किसी भी मुद्दे को लॉग कर सकता हूं। क्या यह बूलियन का "अनुचित" उपयोग है?जावा में एक शून्य प्रकार घोषित करने के बजाय बूलियन लौट रहा है?
उत्तर
आमतौर पर मैं कुछ गलत होने पर संकेत देने के लिए Exception
एस का उपयोग करता हूं।
false
लौटने के बजाय, आप समस्या के बारे में एक विस्तृत संदेश के साथ throw
Exception
कर सकते हैं।
रिटर्निंग false
आपको समस्या के बारे में अधिक जानकारी नहीं देता है।
फिर, false
वापसी मान की जांच करने के बजाय, विधि कॉल को try
/catch
में डालें, यदि आप उम्मीद करते हैं कि विधि आसानी से विफल हो सकती है।
कई लोग शिकायत करेंगे कि यह विधि धीमी है। लेकिन, आपके द्वारा प्राप्त लाभ मंदी से काफी अधिक हैं। इसके अलावा, यदि आप जावा की गति का उपयोग कर रहे हैं तो आपकी # 1 चिंता नहीं होनी चाहिए।
यह एक ठीक प्रतिमान है, लेकिन यदि आप कॉलर को मामले को संभालने के लिए मजबूर करना चाहते हैं तो ऑपरेशन सफलतापूर्वक पूरा नहीं होता है, तो आप इसके बजाय एक चेक अपवाद फेंकना चाहेंगे।
यह पैटर्न मूल जावा पुस्तकालयों में होता है, हालांकि। उदाहरण के रूप में File.delete() देखें।
सफलता लौटने के लिए आम तौर पर क्या आप देख है:
- वापसी एक बूलियन
- वापसी शून्य है, लेकिन त्रुटि
- वापसी वाला स्थिति कोड (कम जावा में आम) पर फेंक अपवाद।
सफलता के लिए बुलियन लौटने के साथ कुछ भी गलत नहीं देख सकता, जब तक आपको अपवाद व्यवहार की जानकारी की आवश्यकता न हो।
सफलता के लिए लौटने वाले बूलियन के साथ (संभावित) समस्या आसानी से है जिसके साथ कोई भी विफलता के लिए बूलियन को अनदेखा कर सकता है। यहां तक कि रनटाइम अपवाद भी बहुत अधिक है और कोडिंग और परीक्षण दोनों के दौरान अनदेखा होने की संभावना कम है। – ILMTitan
मुझे आम तौर पर लगता है कि विफलता के मामले में अपवाद फेंकना एक बूलियन लौटने की तुलना में एक बेहतर समाधान है, क्योंकि आम तौर पर इस पर ध्यान नहीं दिया जाता है कि प्रक्रिया सफल हुई है - मुझे केवल यह ख्याल है कि यह असफल रहा है या नहीं। अपवाद का उपयोग करके मैं इस प्रक्रिया के बारे में कोई भी जानकारी प्रदान कर सकता हूं कि प्रक्रिया वास्तव में क्यों विफल रही।
यदि अपवाद अपमानजनक प्रतीत होते हैं, तो आप एक कस्टम स्थिति ऑब्जेक्ट वापस कर सकते हैं जिसमें एक बुलियन और एक स्टेटस संदेश ("6 नए फूबार्स जोड़ा गया" या "फ़ोबोब जोड़ना नहीं था क्योंकि फूबिन भरा हुआ है!"), हालांकि यह निश्चित रूप से अधिक जटिल है।
यह ठीक लगता है, लेकिन शैतान विवरण में निहित है। ;-)
अपवाद फेंकना पेशेवर और विपक्ष के साथ मुख्य विकल्प है।
मुझे लगता है कि आप सटीक कोडिंग के नमूने उपलब्ध कराने के द्वारा और अधिक जानकारी प्राप्त कर सकते हैं ...
केवल स्थितियों में ऐसा करते हैं, जहां यह स्पष्ट है कि कुछ एक बूलियन परिणाम है। IsValidCustomer()
या ऐसे कुछ की तरह।
अन्य सभी चीजों को जहां आपको लगता है आप इसे दे सकते हैं के लिए, यह शायद मतलब है कि आप, Exception
किसी तरह के साथ काम कर रहे हैं, और तुम सच में रैप करने के लिए है कि एक साधारण बूलियन true/false
साथ नहीं करना चाहती क्योंकि आप कर सकते हैं विभिन्न प्रकार के स्वाद (विभिन्न अपवाद) हैं और कुछ कारण गलत क्यों हैं, जिन्हें आप जानना चाहते हैं।
तो या तो अपवाद को ढेर को बुलबुला दें, या इसे पकड़ें और इसे कस्टम अपवाद में बदल दें या इसे लॉग करें या जो भी हो।
यदि कोई अप्रत्याशित परिणाम है, तो अपवाद फेंक दें। यदि आप सिर्फ यह कार्य करना चाहते हैं कि "क्या मैंने एक्स किया" तो एक बूलियन लौटाएं।
प्रैक्टिस में, मुझे लगता है कि एक अपवाद फेंकना सबसे अच्छा काम है जब विफलता का मतलब है कि हमें प्रक्रिया को रद्द करने की आवश्यकता है। जैसे, यदि आप ऑर्डर को संसाधित करने की कोशिश कर रहे हैं - ग्राहक को बिल करें, शिपिंग की व्यवस्था करें, बिक्री करों का भुगतान करें, आदि - अगर आपको ऑर्डर रिकॉर्ड नहीं मिल रहा है, तो संभवतः अन्य सभी काम करने में थोड़ा सा बिंदु है। आप बस वहां से बाहर निकलना चाहते हैं। अपवाद आपको इसे आसानी से करने देते हैं। बस ब्लॉक के नीचे पकड़ें, त्रुटि प्रदर्शित करें या लॉग करें, और बाहर निकलें।
दूसरी तरफ, यदि "त्रुटि" का अर्थ है कि मेरा प्रोग्राम एक अलग प्रवाह पथ लेता है, तो एक बूलियन लौटने से अधिक समझ आता है। जैसे, अगर मैं एक विशिष्ट ग्राहक की तलाश में हूं और यदि वह मौजूद है तो मैं उसका रिकॉर्ड अपडेट करता हूं और यदि वह एक नया ग्राहक रिकॉर्ड नहीं बनाता है, तो यह बुलियन लौटने के लिए बहुत समझ में आता है, और कॉलर परीक्षण में और जब सत्य एक पथ का पालन करें और जब दूसरा झूठा हो।
वास्तव में यह शब्द "त्रुटि" के दो बहुत अलग अर्थ हैं, और वे अलग-अलग हैंडलिंग के लिए कॉल करते हैं। यह काफी संभव है कि वही कार्य दोनों ही कर सकता है। जैसे, वापस लौटने पर, झूठी वापसी नहीं मिली, आई/ओ त्रुटि पर एक अपवाद फेंकने की कोशिश कर रहा है।
गैर-असाधारण विफलता परिणामों को इंगित करने के लिए बूलियन मानों का उपयोग करें। एक उदाहरण एक खोज समारोह होगा। नाममात्र विफलता नहीं मिलेगी। संचार करना कि अपवादों के साथ परिणाम अनावश्यक है। असाधारण मामलों के लिए अपवाद बचाओ; के बीच का अंतर और नहीं खोज सकता है।
- 1. एक अग्रेषित घोषित संरचना वापस अपरिभाषित व्यवहार लौट रहा है?
- 2. एंड्रॉइड: getSearchableInfo (getComponentName()) शून्य लौट रहा है?
- 3. ट्री मैप में कुंजी शून्य लौट रहा है
- 4. एक std :: सूची महंगा लौट रहा है?
- 5. सर्विसस्टैक और एक स्ट्रीम लौट रहा है
- 6. सी: उपखंड से एक डबल * लौटने के विरुद्ध एक शून्य बनाम लौट रहा है
- 7. क्यों लौट स्थिरांक वाजिब इस प्रकार के बजाय वाजिब
- 8. TextBlock.GetBindingExpression वापस लौट रहा है
- 9. स्कैला 0 पैरामीटर, बदसूरत वाक्यविन्यास के साथ एक शून्य समारोह लौट रहा है?
- 10. सी में va_list सुरक्षित लौट रहा है?
- 11. CLGeocoder केवल एक प्लेसमार्क लौट रहा है
- 12. OptionParser तर्क के बदले बूल लौट रहा है?
- 13. रेल find_by_ तरीकों शून्य के बजाय एक खाली सरणी नहीं लौट जाना चाहिए?
- 14. जावा में बूलियन और बूलियन के बीच क्या अंतर है?
- 15. "शून्य नहीं है" बनाम बूलियन MySQL - प्रदर्शन
- 16. System.in को शून्य के बजाय nullInputStream() के रूप में क्यों घोषित किया गया है?
- 17. जावा शून्य में मुख्य() क्यों है?
- 18. pthread_cond_timedwait तुरंत लौट रहा है
- 19. जावा में शून्य है?
- 20. प्रकार शून्य शून्य
- 21. जावा में पहचानकर्ता के घोषित प्रकार का पता कैसे लगाएं?
- 22. IJavaProject.findPackageFragmentRoots एक खाली सरणी क्यों लौट रहा है?
- 23. एसक्यूएल बूलियन सत्य परीक्षण: शून्य या शून्य
- 24. MySQL LOAD_FILE वापस लौट रहा है
- 25. क्या फ़ंक्शन के अंदर एक चर के बजाय एक कॉन्स्ट घोषित करने का कोई लाभ है?
- 26. एंड्रॉइड जियोकोडर खाली पता लौट रहा है
- 27. उद्देश्य सी क्लास में एक बूलियन प्रकार गुण सेट करने के लिए कैसे
- 28. Fetchall Python में केवल एक कॉलम लौट रहा है?
- 29. जावा में 1-बिट चर घोषित करना संभव है?
- 30. $ _FILES ["फ़ाइल"] ["आकार"] 0 लौट रहा है?
और अपवाद, असाधारण, असाधारण होना चाहिए। तो गति अंतर सामग्री होना चाहिए। –
+1 के लिए "अपवाद, अच्छी तरह से, असाधारण होना चाहिए" –