अपवाद को सही ढंग से व्यक्त करने और संभालने के लिए एक प्रणाली के लिए कई आवश्यकताएं हैं। अवधारणा को लागू करने के लिए भाषा चुनने के लिए कई विकल्प भी हैं।
अपवादों के लिए आवश्यकताएँ (किसी विशेष क्रम में नहीं):
दस्तावेज़ीकरण : एक भाषा के पास एक दस्तावेज़ का अपवाद होना चाहिए जो एक एपीआई फेंक सकता है। आदर्श रूप से यह प्रलेखन माध्यम प्रोग्रामर को सहायता प्रदान करने के लिए संकलक और आईडीई को अनुमति देने के लिए मशीन योग्य होना चाहिए।
असाधारण अपवादों को संचारित करें : यह एक स्पष्ट स्थिति है, जो किसी कार्य को उन स्थितियों को व्यक्त करने की अनुमति देती है, जो कि अपेक्षित कार्यक्षमता को कार्य करने से रोकती हैं। मेरी राय में ऐसी स्थितियों की तीन बड़ी श्रेणियां हैं:
2.1 कोड में कुछ डेटा अमान्य होने का कारण बनता है।
2.2 कॉन्फ़िगरेशन या अन्य बाहरी संसाधनों में समस्याएं।
2.3 संसाधन जो स्वाभाविक रूप से अविश्वसनीय हैं (नेटवर्क, फ़ाइल सिस्टम, डेटाबेस, एंड-यूज़र आदि)। ये एक कोने का मामला है क्योंकि उनकी अविश्वसनीय प्रकृति से हमें उनकी छिटपुट विफलताओं की उम्मीद करनी चाहिए। इस मामले में क्या इन स्थितियों को असाधारण माना जाएगा?
इसे संभालने के लिए कोड के लिए पर्याप्त जानकारी प्रदान करें : अपवादों को कैली को पर्याप्त जानकारी प्रदान करनी चाहिए ताकि वह प्रतिक्रिया कर सके और संभवतः स्थिति को संभाल सके। जानकारी भी पर्याप्त होनी चाहिए ताकि लॉग इन करने पर यह अपवाद प्रोग्रामर को पर्याप्त संदर्भ प्रदान कर सके और आपत्तिजनक कथनों की पहचान कर सके और समाधान प्रदान कर सके।
प्रोग्रामर को अपने कोड के निष्पादन की वर्तमान स्थिति के बारे में आत्मविश्वास प्रदान करें : प्रोग्रामर के रास्ते से बाहर रहने के दौरान आवश्यक सुरक्षा उपायों को प्रदान करने के लिए एक सॉफ्टवेयर सिस्टम की अपवाद हैंडलिंग क्षमताओं को पर्याप्त रूप से मौजूद होना चाहिए ताकि वह कार्य पर केंद्रित रह सकें हाथ।
इन्हें कवर करने के लिए विभिन्न भाषाओं में निम्नलिखित तरीके लागू किए गए हैं:
जाँच किए गए अपवाद अपवादों को दस्तावेज़ करने का एक शानदार तरीका प्रदान करते हैं, और सैद्धांतिक रूप से जब सही तरीके से लागू किया जाता है तो पर्याप्त आश्वासन देना चाहिए कि सभी अच्छे हैं। हालाँकि लागत ऐसी है कि बहुत से लोग इसे अपवाद मानकर या तो अनियंत्रित हो जाते हैं या फिर अपवादों को अनियंत्रित करके फिर से फेंक देते हैं। जब अनुचित रूप से जाँच किए गए अपवादों का उपयोग किया जाता है, तो यह बहुत अधिक खो देता है। इसके अलावा, चेक किए गए अपवादों के लिए एक एपीआई बनाना मुश्किल है जो समय में स्थिर है। एक विशिष्ट डोमेन के भीतर एक सामान्य प्रणाली के कार्यान्वयन से यह असाधारण स्थिति का भार हो जाएगा जो पूरी तरह से जांच किए गए अपवादों का उपयोग करके बनाए रखना मुश्किल हो जाएगा।
अनियंत्रित अपवाद - चेक किए गए अपवाद की तुलना में बहुत अधिक बहुमुखी वे किसी दिए गए कार्यान्वयन की संभावित असाधारण स्थितियों को ठीक से दस्तावेज़ करने में विफल होते हैं। वे तदर्थ प्रलेखन पर भरोसा करते हैं अगर सब पर। यह ऐसी स्थितियों का निर्माण करता है जहां एक माध्यम की अविश्वसनीय प्रकृति एक एपीआई द्वारा मुखौटा होती है जो विश्वसनीयता की उपस्थिति देती है। इसके अलावा जब इन अपवादों को उनके अर्थ को ढीला कर दिया जाता है क्योंकि वे अमूर्त परतों के माध्यम से वापस ऊपर जाते हैं। चूंकि वे खराब रूप से प्रलेखित हैं, एक प्रोग्रामर उन्हें विशेष रूप से लक्षित नहीं कर सकता है और अक्सर यह सुनिश्चित करने की आवश्यकता होती है कि माध्यमिक प्रणालियों को सुनिश्चित करने के लिए आवश्यक से अधिक व्यापक जाल डालना चाहिए, क्या उन्हें असफल होना चाहिए, पूरे सिस्टम को नीचे नहीं लाना चाहिए। जो हमें प्रदान की गई अपवादों की जाँच की गई निगलने की समस्या के लिए वापस लाता है।
मल्टीस्टेट रिटर्न प्रकार यहां एक असंबद्ध सेट, टपल, या अन्य समान अवधारणा पर भरोसा करना है या तो अपेक्षित परिणाम या अपवाद का प्रतिनिधित्व करने वाली वस्तु। यहां कोई स्टैक अनइंडिंग नहीं है, कोड के माध्यम से कोई कटिंग नहीं है, सब कुछ सामान्य रूप से निष्पादित होता है लेकिन जारी रखने से पहले त्रुटि के लिए रिटर्न वैल्यू को मान्य किया जाना चाहिए। मैंने वास्तव में इसके साथ काम नहीं किया है, इसलिए अभी तक अनुभव से कोई टिप्पणी नहीं कर सकता, मैं स्वीकार करता हूं कि यह सामान्य प्रवाह को दरकिनार करते हुए कुछ समस्याओं को हल करता है, लेकिन फिर भी यह बहुत ही समस्याओं से ग्रस्त होगा जैसा कि थकाऊ अपवाद और लगातार "आपके चेहरे पर" होना।
तो सवाल यह है:
इस मामले में आपका अनुभव क्या है और आपके अनुसार, एक भाषा के लिए एक अच्छा अपवाद हैंडलिंग सिस्टम बनाने के लिए सबसे अच्छा उम्मीदवार क्या है?
संपादित करें: इस प्रश्न को लिखने के कुछ ही मिनटों बाद मैं इस पोस्ट पर आया , डरावना!
noexcept
C ++ में कहानी को देखना C # और Java में EH के लिए बहुत अच्छी अंतर्दृष्टि प्रदान कर सकता है।)