मुझे अपवाद हैंडलिंग और लॉगिंग की चिंताओं के बीच बहुत अंतर नहीं दिखता है, दोनों क्रॉस कटिंग चिंताएं हैं। तुम क्या सोचते हो? यह एक विधि लागू कर रहा है, जो मुख्य तर्क के साथ interleaved के बजाय अपने दम पर अलग से नियंत्रित नहीं किया जाना चाहिए?
संपादित करें : मैं जो कहना चाह रहा हूं, वह यह है कि मेरे विचार में एक विधि कार्यान्वयन में केवल निष्पादन के सफल मार्ग के लिए तर्क होना चाहिए और अपवादों को कहीं और संभाला जाना चाहिए। यह जाँच / अनियंत्रित अपवाद नहीं है।
उदाहरण के लिए, एक भाषा इस तरह से निर्माणों का उपयोग करके पूरी तरह से जांच की गई तरीके से अपवादों को संभाल सकती है:
class FileReader {
public String readFile(String path) {
// implement the reading logic, avoid exception handling
}
}
handler FileReader {
handle String readFile(String path) {
when (IOException joe) {
// somehow access the FileInputStram and close it
}
}
}
उपरोक्त वैचारिक भाषा में, प्रोग्राम FileReader
हैंडलर की अनुपस्थिति में संकलित नहीं होगा , क्योंकि FileReader
क्लास की रीडफाइल अपवाद को नहीं फेंक रही है। इसलिए FileReader
हैंडलर की घोषणा करके , कंपाइलर यह सुनिश्चित कर सकता है कि उसे संभाला जा रहा है और प्रोग्राम फिर कंपाइल करता है।
इस तरह से हमारे पास चेक किए गए और अनियंत्रित अपवाद समस्याओं दोनों में से सबसे अच्छा है: मजबूती और पठनीयता।