मेरी राय में, अपवाद रन समय में कोड त्रुटियों का पता लगाने के लिए एक आवश्यक उपकरण है। परीक्षण और उत्पादन में दोनों। उनके संदेशों को पर्याप्त बनाएं ताकि स्टैक ट्रेस के साथ संयोजन में आप यह पता लगा सकें कि लॉग से क्या हुआ।
अपवाद ज्यादातर एक विकास उपकरण हैं और अप्रत्याशित मामलों में उत्पादन से उचित त्रुटि रिपोर्ट प्राप्त करने का एक तरीका है।
चिंताओं को अलग करने के अलावा (केवल अप्रत्याशित त्रुटियों के साथ खुश रास्ता बनाम अप्रत्याशित त्रुटियों के लिए कुछ सामान्य हैंडलर तक पहुंचने के माध्यम से गिरना) एक अच्छी बात है, आपके कोड को अधिक पठनीय और बनाए रखने योग्य है, यह वास्तव में सभी संभव के लिए अपना कोड तैयार करना असंभव है। अनपेक्षितता को पूरा करने के लिए अनपेक्षित मामलों, यहां तक कि त्रुटि हैंडलिंग कोड के साथ इसे ब्लोट करने से भी।
यह वास्तव में "अप्रत्याशित" का अर्थ है।
Btw।, क्या अपेक्षित है और क्या नहीं यह एक निर्णय है जो केवल कॉल साइट पर किया जा सकता है। यही कारण है कि जावा में चेक किए गए अपवादों ने काम नहीं किया - निर्णय एपीआई के विकास के समय किया जाता है, जब यह स्पष्ट या अप्रत्याशित नहीं है।
सरल उदाहरण: हैश मैप के एपीआई के दो तरीके हो सकते हैं:
Value get(Key)
तथा
Option<Value> getOption(key)
पहला अपवाद यदि नहीं मिला, तो उत्तरार्द्ध आपको एक वैकल्पिक मूल्य देता है। कुछ मामलों में, उत्तरार्द्ध अधिक समझ में आता है, लेकिन दूसरों में, आपके कोड को ईमानदारी से किसी दिए गए कुंजी के लिए एक मूल्य होने की उम्मीद करनी चाहिए, इसलिए यदि कोई नहीं है, तो यह एक त्रुटि है कि यह कोड ठीक नहीं हो सकता क्योंकि एक मूल धारणा विफल रही है। इस मामले में यह वास्तव में कोड पथ से बाहर गिरने और कॉल विफल होने की स्थिति में कुछ सामान्य हैंडलर के लिए वांछित व्यवहार है।
कोड को कभी भी असफल बुनियादी मान्यताओं से निपटने की कोशिश नहीं करनी चाहिए।
उन्हें छोड़कर और निश्चित रूप से अच्छी तरह से पठनीय अपवादों को फेंकने से।
अपवाद फेंकना बुराई नहीं है, लेकिन उन्हें पकड़ना हो सकता है। अप्रत्याशित त्रुटियों को ठीक करने का प्रयास न करें। कुछ स्थानों पर अपवादों को पकड़ो जहां आप कुछ लूप या ऑपरेशन जारी रखना चाहते हैं, उन्हें लॉग इन करें, शायद एक अज्ञात त्रुटि की रिपोर्ट करें, और यह बात है।
सभी जगह कैच ब्लॉक एक बहुत बुरा विचार है।
अपने एपीआई को इस तरह से डिज़ाइन करें जो आपके इरादे को व्यक्त करना आसान बना दे, अर्थात यह घोषित करना कि आप एक निश्चित मामले की उम्मीद करते हैं, जैसे कि कुंजी नहीं मिली, या नहीं। तब आपके एपीआई के उपयोगकर्ता केवल अनपेक्षित मामलों के लिए फेंक कॉल का चयन कर सकते हैं।
मुझे लगता है कि लोगों द्वारा अपवादों को रोकने का कारण और त्रुटि से निपटने के स्वचालन के लिए इस महत्वपूर्ण उपकरण को छोड़ने से बहुत दूर जाना और नई भाषाओं से चिंताओं को बेहतर ढंग से अलग करना बुरे अनुभव हैं।
वह, और कुछ गलतफहमी के बारे में कि वे वास्तव में किसके लिए अच्छे हैं।
मोनैडिक बाइंडिंग के माध्यम से EVERYTHING करके उनका अनुकरण करना आपके कोड को कम पठनीय और बनाए रखने योग्य बनाता है, और आप स्टैक ट्रेस के बिना समाप्त हो जाते हैं, जो इस दृष्टिकोण को बदतर बना देता है।
कार्यात्मक शैली त्रुटि हैंडलिंग अपेक्षित त्रुटि मामलों के लिए महान है।
अपवाद से निपटने को स्वचालित रूप से सभी बाकी का ख्याल रखने दें, यही वह है :)
panic
जो कि समान नहीं है। इसके अलावा वहाँ क्या कहा गया है, एक अपवाद एक प्रदर्शन करने के लिए एक परिष्कृत (लेकिन आरामदायक) तरीके से बहुत अधिक नहीं हैGOTO
, हालांकि कोई भी इसे स्पष्ट कारणों के लिए नहीं कहता है।