यदि कोई भाषा अपवादों का समर्थन करती है, तो वह अपवादों को फेंकना पसंद करती है और ग्राहक अपवाद को पकड़ सकते हैं यदि वे नहीं चाहते हैं कि यह एक विफलता का परिणाम है। वास्तव में, आपके कोड के ग्राहक अपवादों की अपेक्षा करते हैं और कई बगों में चलेंगे क्योंकि वे रिटर्न मानों की जाँच नहीं करेंगे।
यदि आपके पास कोई विकल्प है, तो अपवादों का उपयोग करने के लिए कुछ फायदे हैं।
संदेश
अपवादों में उपयोगकर्ता के पढ़ने योग्य त्रुटि संदेश होते हैं जो डेवलपर्स द्वारा डिबगिंग के लिए उपयोग किए जा सकते हैं या यदि वांछित हो तो भी उपयोगकर्ताओं को प्रदर्शित किए जा सकते हैं। यदि उपभोग कोड अपवाद को संभाल नहीं सकता है, तो यह हमेशा लॉग इन कर सकता है ताकि डेवलपर्स लॉग के माध्यम से जा सकें और हर दूसरे ट्रेस पर रुकें बिना यह पता लगा सकें कि वापसी का मूल्य क्या था और यह पता लगाने के लिए तालिका में मैप करें कि क्या था। वास्तविक अपवाद।
रिटर्न मानों के साथ, कोई अतिरिक्त जानकारी आसानी से प्रदान नहीं की जा सकती है। कुछ भाषाएं अंतिम त्रुटि संदेश प्राप्त करने के लिए मेथड कॉल करने का समर्थन करेंगी, इसलिए यह चिंता थोड़ी कम हो जाती है, लेकिन इसके लिए कॉलर को अतिरिक्त कॉल करने की आवश्यकता होती है और कभी-कभी इस जानकारी को वहन करने वाले 'विशेष ऑब्जेक्ट' तक पहुंच की आवश्यकता होगी।
अपवाद संदेशों के मामले में, मैं यथासंभव अधिक संदर्भ प्रदान करता हूं, जैसे:
"फू" नाम की एक नीति को उपयोगकर्ता "बार" के लिए पुनर्प्राप्त नहीं किया जा सकता है, जिसे उपयोगकर्ता की प्रोफ़ाइल में संदर्भित किया गया था।
इसकी तुलना रिटर्न कोड -85 से करें। आप किसे पसंद करेंगे?
ढेर को बुलाओ
अपवादों में आमतौर पर विस्तृत कॉल स्टैक होते हैं जो डिबग कोड को तेज़ी से और तेज़ी से मदद करते हैं, और यदि वांछित हो तो कॉलिंग कोड द्वारा भी लॉग इन किया जा सकता है। यह डेवलपर्स को आमतौर पर सटीक लाइन पर समस्या को इंगित करने की अनुमति देता है, और इस प्रकार बहुत शक्तिशाली है। एक बार फिर, इसकी तुलना रिटर्न मानों (जैसे -85, 101, 0, आदि) के साथ एक लॉग फ़ाइल में करें, आप किसे पसंद करेंगे?
तेजी से पक्षपाती दृष्टिकोण विफल
यदि किसी विधि को कहीं विफल कहा जाता है, तो वह अपवाद को फेंक देगी। कॉलिंग कोड को अपवाद को स्पष्ट रूप से दबा देना होगा या यह विफल हो जाएगा। मैंने इसे वास्तव में आश्चर्यजनक पाया है क्योंकि विकास और परीक्षण (और यहां तक कि उत्पादन में) कोड जल्दी से विफल हो जाता है, डेवलपर्स को इसे ठीक करने के लिए मजबूर करता है। रिटर्न वैल्यू के मामले में, यदि रिटर्न वैल्यू का कोई चेक छूट जाता है, तो त्रुटि को चुपचाप नजरअंदाज कर दिया जाता है और बग सतहों को अप्रत्याशित रूप से, आमतौर पर डिबग और फिक्स करने के लिए बहुत अधिक लागत के साथ।
रैपिंग और अनवांटेड एक्सेप्शन
अपवादों को अन्य अपवादों के अंदर लपेटा जा सकता है और यदि आवश्यक हो तो अपरिवर्तित किया जा सकता है। उदाहरण के लिए, आपका कोड फेंक सकता है ArgumentNullException
जो कॉलिंग कोड अंदर लपेट सकता है UnableToRetrievePolicyException
क्योंकि कॉलिंग कोड में ऑपरेशन विफल हो गया था। हालांकि उपयोगकर्ता को मेरे द्वारा दिए गए उदाहरण के समान संदेश दिखाया जा सकता है, कुछ डायग्नोस्टिक कोड अपवाद को खोल सकते हैं और पा सकते हैं कि ArgumentNullException
समस्या का कारण था, जिसका अर्थ है कि यह आपके उपभोक्ता के कोड में एक कोडिंग त्रुटि है। इसके बाद अलर्ट को फायर किया जा सकता है ताकि डेवलपर कोड को ठीक कर सके। इस तरह के उन्नत परिदृश्य रिटर्न मान के साथ लागू करना आसान नहीं है।
कोड की सादगी
यह समझाने के लिए थोड़ा कठिन है, लेकिन मैंने इस कोडिंग के माध्यम से रिटर्न मानों के साथ-साथ अपवादों को भी सीखा। कोड जो रिटर्न मानों का उपयोग करके लिखा गया था, आमतौर पर एक कॉल करेगा और फिर रिटर्न वैल्यू क्या थी, इस पर चेक की एक श्रृंखला है। कुछ मामलों में, यह दूसरी विधि से कॉल करेगा, और अब उस पद्धति से रिटर्न मानों की एक और श्रृंखला होगी। अपवादों के साथ, अपवाद हैंडलिंग सबसे आसान है अगर सभी मामलों में नहीं। आपके पास एक कोशिश / पकड़ / अंत में ब्लॉक है, रनटाइम के साथ क्लीन-अप के लिए अंत में ब्लॉक में कोड निष्पादित करने के लिए अपनी पूरी कोशिश कर रहा है। यहां तक कि नेस्टेड कोशिश / पकड़ / अंत में ब्लॉक के माध्यम से पालन करने और बनाए रखने के लिए अपेक्षाकृत आसान है, अगर नेस्टेड और कई तरीकों से संबंधित रिटर्न मान।
निष्कर्ष
यदि आप जिस प्लेटफ़ॉर्म का उपयोग कर रहे हैं वह अपवादों का उपयोग कर रहा है (जैसे कि जावा या .NET), तो आपको निश्चित रूप से यह मान लेना चाहिए कि अपवादों को फेंकने के अलावा और कोई रास्ता नहीं है क्योंकि इन प्लेटफार्मों में अपवादों को फेंकने के लिए दिशानिर्देश हैं, और आपके ग्राहक उम्मीद करने वाले हैं इसलिए। अगर मैं आपकी लाइब्रेरी का उपयोग कर रहा था, तो मैं रिटर्न वैल्यूज़ की जाँच करने की जहमत नहीं उठाऊँगा क्योंकि मुझे उम्मीद है कि अपवादों को फेंक दिया जाएगा, यही है कि इन प्लेटफार्मों में दुनिया कैसी है।
हालाँकि, अगर यह C ++ था, तो यह निर्धारित करना थोड़ा अधिक चुनौतीपूर्ण होगा क्योंकि एक बड़ा कोडबेस पहले से ही रिटर्न कोड के साथ मौजूद है, और बड़ी संख्या में डेवलपर्स अपवादों के विरोध में मान लौटाने के लिए तैयार हैं (जैसे Windows HRES के साथ व्याप्त है) । इसके अलावा, कई अनुप्रयोगों में, यह एक प्रदर्शन मुद्दा भी हो सकता है (या कम से कम माना जाता है)।
try
/ के लिएcatch
मौजूद है। इसके अतिरिक्त, आप इसे संभालने के लिए एक अधिक उपयुक्त स्थान पर अपनेtry
/catch
बहुत आगे रख सकते हैं (चिंताओं के अधिक अलगाव के लिए अनुमति देता है)।