असाधारण चीजों के लिए अपवादों का उपयोग करें, जिन चीजों से आप बहुत अधिक बार मुठभेड़ की उम्मीद नहीं कर सकते हैं, वे चीजें जो इंगित करती हैं कि कुछ गलत है। उदाहरण के लिए, यदि नेटवर्क डाउन है, तो यह वेब सर्वर के लिए एक असाधारण बात है। यदि डेटाबेस अनुपलब्ध है, तो इसका मतलब है कि कुछ गलत है। यदि कॉन्फ़िगरेशन फ़ाइल अनुपलब्ध है, तो संभवतः इसका अर्थ है कि उपयोगकर्ता ने इसके साथ गड़बड़ की है।
गलत कोड को संभालने के लिए अपवादों का उपयोग न करें। कोड की शुद्धता की जांच करने के लिए, आपको .NET फ्रेमवर्क 4 और बाद में, या तो कोड कॉन्ट्रैक्ट्स (जो अभिकथनों की जगह लेते हैं और अतिरिक्त, विशेष रूप से मूल्यवान विशेषताएं हैं) का उपयोग करना चाहिए।
गैर-असाधारण मामलों में अपवादों का उपयोग न करें। तथ्य यह है कि उपयोगकर्ता, जब एक संख्या दर्ज करने के लिए कहा जाता है, तो "कुत्ते" में प्रवेश करना अपवाद के लायक इतना असाधारण नहीं है।
अपवादों के प्रकारों का चयन करते समय सावधान रहें। जरूरत पड़ने पर अपने खुद के प्रकार बनाएं। ध्यान से विरासत को चुना, यह ध्यान में रखते हुए कि माता-पिता को पकड़ने से बच्चों को भी पकड़ा जाएगा। कभी नहीं throw Exception
।
त्रुटियों के लिए रिटर्न कोड का उपयोग न करें। त्रुटि कोड आसानी से नकाबपोश, अनदेखा, भुला दिए जाते हैं। यदि कोई त्रुटि है, या तो इसे संभाल लें, या इसे ऊपरी स्टैक पर प्रचारित करें।
ऐसे मामलों में जहां किसी विधि से त्रुटि की वापसी की उम्मीद की जाती है और त्रुटि असाधारण नहीं है, एनम का उपयोग करें, कभी भी त्रुटि संख्या नहीं। उदाहरण:
// Note that the operation fails pretty often, since it deals with the servers which are
// frequently unavailable, and the ones which send garbage instead of the actual data.
private LoadOperationResult LoadProductsFromWeb()
{
...
}
का अर्थ LoadOperationResult.ServerUnavailable
, LoadOperationResult.ParsingError
आदि और अधिक स्पष्ट है, की तुलना में कहना है कि कोड को याद 12 का मतलब है कि सर्वर डाउन है, और कोड 13 - कि डेटा पार्स नहीं किया जा सकता।
जब वे विशिष्ट डोमेन में काम करने वाले प्रत्येक डेवलपर द्वारा ज्ञात सामान्य लोगों को संदर्भित करते हैं, तो त्रुटि कोड का उपयोग करें। उदाहरण के लिए, HTTP 404 Not Found या HTTP 500 इंटरनल सर्वर एरर के लिए एनम वैल्यू को रिइंस्टॉल न करें।
बूलियन्स से सावधान रहें। जल्दी या बाद में, आप न केवल जानना चाहेंगे कि क्या कोई विशिष्ट विधि सफल हुई या विफल रही, लेकिन क्यों। अपवाद और दुश्मनी इसके लिए बहुत अधिक शक्तिशाली हैं।
हर अपवाद को न पकड़ें (जब तक कि आप ढेर के शीर्ष पर न हों)। यदि आप एक अपवाद को पकड़ते हैं, तो आपको इसे संभालने के लिए तैयार होना चाहिए। सब कुछ पकड़ने से पता चलता है कि अगर आपका कोड सही तरीके से चलता है तो आपको कोई परवाह नहीं है। यह "मैं अभी इसे कैसे ठीक करना चाहता हूं, खोज नहीं करना चाहता" हल कर सकता है, लेकिन जल्द या बाद में आपको चोट पहुंचाएगा।
C # में, इस तरह के अपवादों को कभी भी खारिज न करें:
catch (SomeException ex)
{
...
throw ex;
}
क्योंकि आप स्टैक तोड़ रहे हैं। इसके बजाय यह करें:
catch (SomeException)
{
...
throw;
}
अपवाद संदेश लिखते समय प्रयास करें। कितनी बार मैंने कुछ ऐसा देखा है throw Exception("wrong data")
या throw Exception("shouldn't call this method in this context")
। छह महीने बाद खुद सहित अन्य डेवलपर्स को पता नहीं होगा कि डेटा क्या गलत है और हमें किसी संदर्भ में कुछ विधि क्यों और क्यों नहीं कहनी चाहिए, न ही कौन सा संदर्भ ठीक है।
उपयोगकर्ता को अपवाद संदेश न दिखाएं। वे आम लोगों के लिए अपेक्षित नहीं हैं, और अक्सर स्वयं डेवलपर्स के लिए भी अपठनीय हैं।
अपवाद संदेशों को स्थानीय न करें। स्थानीयकृत संदेश के लिए दस्तावेज़ खोजना थकाऊ और व्यर्थ है: प्रत्येक संदेश केवल अंग्रेजी और अंग्रेजी में होना चाहिए।
अपवादों और त्रुटियों पर विशेष रूप से ध्यान केंद्रित न करें: लॉग भी अत्यंत महत्वपूर्ण हैं।
.NET में, विधि के XML प्रलेखन में अपवादों को शामिल करना न भूलें:
/// <exception cref="MyException">Description of the exception</exception>
XML दस्तावेज़ीकरण में अपवादों को शामिल करना लाइब्रेरी का उपयोग करने वाले व्यक्ति के लिए चीजों को बहुत आसान बनाता है। यह अनुमान लगाने की कोशिश करने से अधिक कष्टप्रद कुछ भी नहीं है कि कौन सा अपवाद संभवतः एक विधि द्वारा फेंका जा सकता है और क्यों।
इस अर्थ में, जावा अपवाद हैंडलिंग एक सख्त, बेहतर दृष्टिकोण प्रदान करता है। यह आपको या तो अपवादित तरीकों से संभावित रूप से फेंके गए अपवादों से निपटने के लिए मजबूर करता है, या अपनी खुद की विधि में घोषणा करता है कि यह उन अपवादों को फेंक सकता है जिन्हें आप संभालते नहीं हैं, चीजों को विशेष रूप से पारदर्शी बनाते हैं।