NotImplementedException का उपयोग करें


15

क्या यह NotImplementedExceptionकोड के लिए फेंकने के लिए बुरा व्यवहार माना जाता है जो आपने अभी तक नहीं लिखा है? संभवतः TODO टिप्पणियों को अधिक सुरक्षित माना जाएगा?


6
आपके लिए इस तरह के अपवादों का उपयोग करने का नकारात्मक पक्ष क्या होगा?
एसआरकेएक्स

@SRKX प्रोडक्शन कोड में अपवाद होने और पूरे कोड ब्लॉक के काम न करने का जोखिम है। (मेरे साथ अभी तक नहीं हुआ है लेकिन हम सभी के पास दिन हैं) मैं व्यक्तिगत रूप से उनका उपयोग करता हूं, मुझे चिंता थी कि मैं कुछ डाउनसाइड्स को अनदेखा कर सकता हूं।
टॉम स्क्वायर्स

अजीब तरह से पर्याप्त है, कोई भी टैग निर्दिष्ट नहीं करता है कि किस भाषा का उपयोग किया जा रहा है। यह प्रत्येक सामान्य भाषा पर लागू नहीं होता है, क्योंकि C में किसी प्रकार का अपवाद नहीं है। यहाँ एक भाषा टैग के लिए कमरा है, दोस्तों।
डेविड थॉर्नले

1
@DavidThornley, सवाल मूल रूप से C # के रूप में टैग किया गया था, इसलिए मैंने टैग को पढ़ा।
२२:

@ शविक: सोचा कि यह संभवतया C # है। टैग जोड़ने के लिए धन्यवाद।
डेविड थॉर्नले

जवाबों:


34

मेरा मानना NotImplementedExceptionहै कि वास्तव में यह एक अच्छा अभ्यास है।

वास्तव में, यदि आप एक विधि को लागू करना भूल जाते हैं, और आप इसे बाद में अपनी परियोजना में उपयोग करते हैं (और मुझे विश्वास है, ऐसा होता है), तो आप लंबे समय तक डिबगिंग खर्च कर सकते हैं जो कि कदम से गलत कदम है। यदि आपके पास अपवाद है, तो अपवाद को रोकते हुए, प्रोग्राम सीधे बंद हो जाएगा (यदि आप अपवाद को पकड़ते हैं, तो आपको यह देखकर जल्दी मिल जाएगा कि आपने क्या अपवाद पकड़ा है)।

मैं आपको TODO टिप्पणियों NotImplementedException के साथ संयुक्त रूप से उपयोग करने की सलाह दूंगा, जिस तरह से आप GUI सहायता (VS में कार्यों के साथ) और प्रोग्राम सुरक्षा को जोड़ते हैं।

रिलीज़ संस्करण के लिए, यह मेरी राय में और भी महत्वपूर्ण है, क्योंकि ज्यादातर मामलों में आप अपने प्रोग्राम को स्पष्ट रूप से ठीक से काम करने के बजाय क्रैश करने के लिए अपने प्रोग्राम को पसंद करेंगे, लेकिन गलत परिणाम उत्पन्न करेंगे।


6
यदि आप Resharper का उपयोग करते हैं, तो यह NotImplementedExceptionउसी तरह से दिखाता है जैसे कि TODO टिप्पणियां। मुझे लगता है कि यह एक अच्छी सुविधा है।
svick

1
कुछ अच्छे टीडीडी अभ्यास में फेंकें और आपको एक विजेता मिल गया है
LRE

7

यह त्रुटियों और त्रुटि हैंडलिंग के आसपास आपके सामान्य दर्शन पर निर्भर करता है। मैं "हार्ड एरर" टाइप का आदमी हूं: मैं थोड़े से संकेत पर एक अपवाद फेंक दूंगा कि कुछ गलत हो सकता है; मैं सब कुछ मुखर कर दूंगा; यदि कोई त्रुटि है, अगर कुछ होने की उम्मीद थी, और यह नहीं है, या यदि कुछ है, और यह नहीं होना चाहिए, तो पूरे ब्रह्मांड को रोकना चाहिए। लाउडस्पीकर के माध्यम से विस्मयबोधक की ध्वनि बजनी चाहिए।

ऐसे अन्य लोग हैं जो त्रुटियों के साथ परेशान नहीं होंगे। तो क्या होगा अगर हम इसे क्लाइंट को भेज दें और पूरी रिपोर्ट मॉड्यूल गायब है क्योंकि हम इसे कोड करना भूल गए हैं, और परीक्षण में किसी को भी इसका एहसास नहीं हुआ, क्योंकि एप्लिकेशन इसके बारे में बहुत चुप था? ग्राहक के चेहरे में एक अपवाद को फेंकने से बेहतर कुछ नहीं!


यह ऐसा है जैसे आप डिबग और रिलीज़ में अलग-अलग व्यवहार चाहते हैं, और एक जोर हमेशा इसे काट नहीं पाएगा। मेरा मानना ​​है कि .नेट कोड कॉन्ट्रैक्ट को रिलीज़ में बंद किया जा सकता है।
जॉब

1
मैं ज्यादातर दावे का उपयोग करता हूं, जो रिलीज में भी बंद हो जाते हैं। मेरा अपना दावा कार्य है जो डिबग में एक ब्रेकपॉइंट मारता है, परीक्षण करते समय एक अपवाद फेंकता है, या रिलीज पर भी संकलन नहीं करता है।
माइक नाकिस

3

मैं कहूंगा कि यह एक अच्छा विचार है। आमतौर पर मैं कंकाल कोड द्वारा फेंके गए उन अपवादों को देखता हूं जो किसी प्रपत्र या आरेख या किसी चीज़ से स्वतः उत्पन्न होते हैं। अपवाद मुझे कोड को लागू करने के लिए याद दिलाता है, और यह सुनिश्चित करता है कि अगर मैं स्थापित की गई कार्यक्षमता का उपयोग करने की कोशिश करता हूं तो त्रुटियां होंगी लेकिन कभी भी पूरी तरह से लागू नहीं किया गया है। कभी-कभी मैं इसे बाहर निकाल दूंगा या इसे किसी ऐसी चीज के साथ बदल दूंगा, जो निष्पादन को कम करने की संभावना है (जैसे कि कंसोल को चेतावनी को प्रिंट करना), लेकिन मुझे लगता है कि यह मेरे लिए काम करता है।

यदि आप एक पुस्तकालय का निर्माण कर रहे हैं, जो अन्य लोग इस अपवाद का उपयोग कर रहे हैं, तो विकल्प से बेहतर है, जो आपके पुस्तकालय का एक उपयोगकर्ता होगा जो फ़ंक्शन को कॉल करेगा और सोच रहा होगा कि कुछ भी क्यों नहीं हुआ। बेशक, यह अभी भी एक बुरी तरह से एक भेज दिया पुस्तकालय में इस अपवाद है, लेकिन चुप विफलताओं से बेहतर है, IMO।


1

मुझे लगता है कि यह अच्छा अभ्यास है। विकल्प एक अमान्य मान या स्थिति का प्रचार कर रहा है, जो परीक्षण और उत्पादन कोड दोनों को प्रभावित करने वाला है।


1
पकड़ो .... तुम्हारा मतलब है, जहाँ आप काम करते हैं, कोड जो NotImpl फेंकता है वह QA के लिए सभी तरह से बना देगा? उत्पादन में भी?
स्टीवन एवर्स

3
नहीं, बस विपरीत: एक NotImpl एक अच्छा विशाल लाल झंडा / त्रुटि की स्थिति है। लेकिन TODO का कोई शब्दार्थ मूल्य नहीं है और यह परीक्षण या उत्पादन में, चुपचाप चीजों को खराब कर सकता है। (मैं उत्पादन से TODOs को खत्म करने की नीति की कल्पना कर सकता था, लेकिन हमारे पास ऐसा कोई नियम नहीं है।)
लैरी ओब्रायन

1

मैं हमेशा उपयोग करता हूं NotImplementedException- यही वह सब के लिए है।

यह "असफल उपवास" की अवधारणा से संबंधित है: यदि आपका कोड एक अपवाद फेंक रहा है, तो उसे उत्पादन में जाने से पहले पकड़ा जाना चाहिए। यदि यह उत्पादन करने के लिए मिलता है, तो कम से कम ग्राहक को पता है कि विधानसभा गलत है

यदि कोड अर्थहीन मान देता है या, voidविधियों के लिए, कोई कार्रवाई नहीं करता है, तो आपके कोड के उपभोक्ता यथोचित रूप से सोच सकते हैं कि कॉल तब सार्थक था जब वह नहीं था। फिर, बाद में, जब उन्हें कुछ सही कोड मिलते हैं, तो उनका कोड टूट सकता है क्योंकि यह पूर्व के गलत व्यवहार पर निर्भर करता है।


0

यह किस तरह का प्रोजेक्ट है? काम या घर? घर पर, आप जो चाहें करें - जो कुछ भी आपको याद दिलाता है कि आपको वह पूरा करने की ज़रूरत है जो आप कर रहे हैं।

काम पर, इसे लिखना समाप्त करें।

मैं ऐसी स्थिति नहीं देख सकता, जहां मैं कोड की जांच करूंगा जो अन्य devs, QA या बिल्ड को तोड़ / सकता है।


खैर, मैं घर पर भी अच्छी प्रथाओं का पालन करने की कोशिश करता हूं।
टॉम स्क्वायर्स

0

मैं अपने doxygene autodocing में I लेकिन a \ todo दोनों करता हूं और फिर अपवाद को फेंक देता हूं। इस तरह अगर लोग आरटीएफएम को परेशान नहीं कर सकते हैं तो कम से कम यह पता लगाने में सक्षम होंगे कि उनका कार्यक्रम क्रैश क्यों हुआ, यह सोचने के बजाय कि एक घोषित फ़ंक्शन क्यों है जो तार्किक मान नहीं लौटा रहा है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.