अपवाद बनाम जोर से पहले यहां पूछा गया है: Design by contract using assertions or exceptions?, Assertion VS Runtime exception, C++ error-codes vs ASSERTS vs Exceptions choices choices :(, Design by contract using assertions or exceptions?, आदि (*) हर्ब सटर के कोडिंग मानकों की तरह किताबें भी हैं जो इस बारे में बात करती हैं। सामान्य सर्वसम्मति यह प्रतीत होती है:एक वैज्ञानिक कंप्यूटिंग लड़के के लिए अपवाद बनाम बनाम (मैं अपने कोड का एकमात्र उपयोगकर्ता हूं)?
आंतरिक त्रुटियों के लिए दावे का उपयोग करें, इस अर्थ में कि मॉड्यूल और डेवलपर का उपयोगकर्ता एक और एक ही व्यक्ति/टीम है। बाकी सब कुछ के लिए अपवाद का प्रयोग करें। (**)
यह नियम मुझे एक चीज़ को छोड़कर, मुझे बहुत समझ में आता है। मैं वैज्ञानिक सिमुलेशन के लिए सी ++ का उपयोग कर एक वैज्ञानिक हूं। मेरे विशेष संदर्भ में, इसका मतलब है कि मैं अपने अधिकांश कोड का एकमात्र उपयोगकर्ता हूं। अगर मैं इस नियम को लागू करता हूं, तो इसका मतलब है कि मुझे कभी अपवादों का उपयोग नहीं करना पड़ेगा? मुझे नहीं लगता, उदाहरण के लिए, अभी भी I/O त्रुटियां हैं, या स्मृति आवंटन समस्याएं हैं, जहां अपवाद अभी भी आवश्यक हैं। लेकिन "बाहरी दुनिया" के साथ मेरे कार्यक्रम की उन बातचीत के अलावा, क्या ऐसे अन्य परिदृश्य हैं जहां मुझे अपवादों का उपयोग करना चाहिए?
मेरे अनुभव में, बहुत से जटिल प्रोग्रामिंग प्रथाएं मेरे लिए बहुत उपयोगी रही हैं, इन अभ्यासों को ज्यादातर बड़े जटिल प्रणालियों या बड़ी टीमों के लिए डिजाइन किया गया है, जबकि मेरे कार्यक्रम ज्यादातर छोटे वैज्ञानिक सिमुलेशन हैं जो ज्यादातर मेरे द्वारा लिखे जाते हैं अकेला। इसलिए यह सवाल है। मेरे संदर्भ में अपवाद उपयोग के कौन से अच्छे अभ्यास लागू होते हैं? या क्या मुझे केवल आवेषण (और I/O, स्मृति आवंटन, और "बाहरी दुनिया" के साथ अन्य इंटरैक्शन के लिए अपवादों का उपयोग करना चाहिए)?
(*) मुझे उम्मीद है कि पूरा प्रश्न पढ़ने के बाद, आप सहमत हैं कि यह एक डुप्लिकेट नहीं है। अपवाद बनाम जोर देने का विषय सामान्य रूप से पहले से निपटाया गया है, लेकिन, जैसा कि मैंने यहां व्याख्या करने की कोशिश की है, मुझे नहीं लगता कि इनमें से कोई भी प्रश्न मेरी विशेष स्थिति को संबोधित करता है।
(**) मैंने इसे अपने शब्दों के साथ लिखा है, जो मैंने पढ़ा है उसे फिर से शुरू करने की कोशिश कर रहा है। अगर आपको लगता है कि यह बहुमत की सर्वसम्मति को प्रतिबिंबित नहीं करता है तो इस कथन की आलोचना करने के लिए स्वतंत्र महसूस करें।
क्या आप कभी भी इस कोड में से किसी एक को साझा नहीं करते हैं/इसे पुस्तकालय बनाते हैं या किसी और को किसी भी समय इस कोड को लेना होगा? आपको कोड को यथासंभव पोर्टेबल बनाए रखने की कोशिश करनी चाहिए – NathanOliver
@NathanOliver निकट भविष्य में नहीं। मैं इसे छात्रों, या करीबी सहयोगियों के साथ साझा करता हूं। लेकिन जैसा कि आप कहते हैं, मुझे रखरखाव की परवाह है। हालांकि, हर्ब सटर के नियम को लागू करने के लिए, मुझे अपने कोड में मनमानी रेखाएं खींचना है, यह निर्धारित करने के लिए कि किसी दिए गए मॉड्यूल में "आंतरिक" क्या है, और बाहरी क्या है। मुझे वास्तव में इसके लिए कोई उपयोग नहीं मिला है। – becko
ऐतिहासिक रूप से आवेषण का उपयोग एक 'सी' तकनीक है। अपवादों का उपयोग करना एक 'सी ++' तकनीक है। इससे आपके उद्देश्य के बारे में आपकी सोच में कोई फर्क पड़ सकता है। आवेषणों का उपयोग ऐसी परिस्थितियों का पता लगाने के लिए किया जाना चाहिए जो संभवतः कभी नहीं हो सकते हैं। लेकिन अगर ऐसा होता है तो मैं जानना चाहता हूं कि मैं कोड डीबग कर सकता हूं। –