जिन वर्षों में मैंने प्रोग्रामिंग और डेवलपिंग सिस्टम को बिताया है, केवल दो ही परिस्थितियाँ हैं जहाँ मुझे प्रश्न उपयोगी में पैटर्न मिला है (दोनों ही मामलों में प्रवीण भी फेंके गए अपवाद का लॉगिंग है, मैं सादे पकड़ को नहीं मानता और nullएक अच्छी प्रैक्टिस के रूप में वापसी करता हूँ। )।
दो स्थितियां निम्नलिखित हैं:
1. जब अपवाद को एक असाधारण राज्य नहीं माना जाता था
यह तब होता है जब आप कुछ डेटा पर एक ऑपरेशन करते हैं, जो फेंक सकता है, आप जानते हैं कि यह फेंक सकता है लेकिन आप अभी भी चाहते हैं कि आपका एप्लिकेशन चालू रहे, क्योंकि आपको संसाधित डेटा की आवश्यकता नहीं है। यदि आप उन्हें प्राप्त करते हैं, तो यह अच्छा है, यदि आप नहीं करते हैं, तो यह भी अच्छा है।
किसी वर्ग की कुछ वैकल्पिक विशेषताएँ मन में आ सकती हैं।
2. जब आप एक नया (बेहतर, तेज?) प्रदान कर रहे हैं, तो पहले से ही उपयोग किए गए इंटरफ़ेस का उपयोग करके एक पुस्तकालय का उपयोग करें
कल्पना करें कि आपके पास किसी प्रकार के पुराने पुस्तकालय का उपयोग करने वाला एक आवेदन है, जो अपवादों को नहीं फेंकता है, लेकिन nullत्रुटि पर वापस आ जाता है। तो आपने इस लाइब्रेरी के लिए एक एडॉप्टर बनाया है, जो लाइब्रेरी के मूल एपीआई की बहुत ज्यादा नकल करता है, और आपके एप्लिकेशन में इस नए (अभी भी नॉन-थ्रोइंग) इंटरफेस का उपयोग कर रहा है और nullखुद को चेक हैंडल कर रहा है ।
पुस्तकालय का एक नया संस्करण आता है, या शायद एक ही कार्यक्षमता प्रदान करने वाले पूरी तरह से अलग पुस्तकालय, जो कि रिटर्निंग nullएस के बजाय , अपवादों को फेंकता है और आप इसका उपयोग करना चाहते हैं।
आप अपने मुख्य आवेदन के अपवादों को लीक नहीं करना चाहते हैं, इसलिए आप इस नए निर्भरता को लपेटने के लिए आपके द्वारा बनाए गए एडेप्टर में उन्हें दबाते हैं और लॉग इन करते हैं।
पहला मामला कोई समस्या नहीं है, यह कोड का वांछित व्यवहार है। हालाँकि, दूसरी स्थिति में, अगर हर जगह nullलाइब्रेरी अडैप्टर के रिटर्न वैल्यू का वास्तव में एक त्रुटि है, तो एपीआई को अपवाद के रूप में फेंकने के लिए रिफलेक्ट करना और पकड़ने के लिए null(और कोड-वार आमतौर पर) एक अच्छा विचार हो सकता है।
मैं व्यक्तिगत रूप से अपवाद का उपयोग केवल पहले मामले के लिए करता हूं। मैंने केवल दूसरे मामले के लिए इसका उपयोग किया है, जब हमारे पास nullएस के बजाय अपवाद के साथ आवेदन के बाकी काम करने के लिए बजट नहीं था ।