पिछले हफ्ते, हमारे पास अपने एप्लिकेशन की सेवा परत में नल से निपटने के बारे में एक गर्म तर्क था। प्रश्न .NET संदर्भ में है, लेकिन यह जावा और कई अन्य तकनीकों में समान होगा।
सवाल यह था: क्या आपको हमेशा नल की जांच करनी चाहिए और अपना कोड काम करना चाहिए चाहे कोई भी बात हो, या एक अपवाद को बंद कर दें जब एक नल अप्रत्याशित रूप से प्राप्त होता है?
एक तरफ, शून्य के लिए जाँच करना जहाँ आप इसकी उम्मीद नहीं कर रहे हैं (यानी इसे संभालने के लिए कोई उपयोगकर्ता इंटरफ़ेस नहीं है), मेरी राय में, खाली पकड़ने के साथ एक कोशिश ब्लॉक लिखने के समान है। आप केवल एक त्रुटि छिपा रहे हैं। त्रुटि यह हो सकती है कि कोड में कुछ बदल गया है और अशक्त अब एक अपेक्षित मूल्य है, या कुछ अन्य त्रुटि है और गलत आईडी विधि को पारित कर दिया गया है।
दूसरी ओर, नल की जाँच सामान्य रूप से एक अच्छी आदत हो सकती है। इसके अलावा, अगर कोई चेक है तो एप्लिकेशन काम पर जा सकता है, कार्यक्षमता का सिर्फ एक छोटा सा हिस्सा होने से कोई प्रभाव नहीं पड़ता है। फिर ग्राहक एक छोटे बग की रिपोर्ट कर सकता है जैसे "टिप्पणी को हटा नहीं सकता" बहुत अधिक गंभीर बग के बजाय जैसे "पेज X को नहीं खोल सकता"।
आप किस अभ्यास का अनुसरण करते हैं और आपके दृष्टिकोण के विरुद्ध या उसके तर्क क्या हैं?
अपडेट करें:
मैं हमारे विशेष मामले के बारे में कुछ विवरण जोड़ना चाहता हूं। हम डेटाबेस से कुछ वस्तुओं को प्राप्त कर रहे थे और उन पर कुछ प्रसंस्करण किया था (चलो कहते हैं, एक संग्रह का निर्माण करें)। कोड लिखने वाले डेवलपर को यह अनुमान नहीं था कि वस्तु अशक्त हो सकती है इसलिए उसने कोई चेक शामिल नहीं किया, और जब पृष्ठ लोड किया गया तो एक त्रुटि थी और पूरा पृष्ठ लोड नहीं हुआ।
जाहिर है, इस मामले में जाँच होनी चाहिए थी। फिर हम इस बात पर बहस में पड़ गए कि क्या संसाधित होने वाली प्रत्येक वस्तु की जाँच की जानी चाहिए, भले ही उसके लापता होने की आशंका न हो, और क्या अंततोगत्वा प्रसंस्करण को चुपचाप निरस्त कर दिया जाना चाहिए।
काल्पनिक लाभ यह होगा कि पृष्ठ काम करना जारी रखेगा। विभिन्न समूहों (उपयोगकर्ताओं, टिप्पणियों, प्रश्नों) में स्टैक एक्सचेंज पर खोज परिणामों के बारे में सोचें। विधि अशक्त के लिए जाँच कर सकती है और उपयोगकर्ताओं के प्रसंस्करण को निरस्त कर सकती है (जो बग के कारण अशक्त है) लेकिन "टिप्पणियाँ" और "प्रश्न" अनुभागों को लौटा दें। पृष्ठ काम करना जारी रखेगा सिवाय इसके कि "उपयोगकर्ता" खंड गायब हो जाएगा (जो एक बग है)। क्या हमें जल्दी असफल होना चाहिए और पूरे पृष्ठ को तोड़ना चाहिए या काम करना जारी रखना चाहिए और किसी को यह देखने के लिए इंतजार करना चाहिए कि "उपयोगकर्ता" खंड गायब है?
assert(foo != null, "foo is web control within the repeater, there's no reason to expect it to be null, etc, etc...");