क्या यह NotImplementedException
कोड के लिए फेंकने के लिए बुरा व्यवहार माना जाता है जो आपने अभी तक नहीं लिखा है? संभवतः TODO टिप्पणियों को अधिक सुरक्षित माना जाएगा?
क्या यह NotImplementedException
कोड के लिए फेंकने के लिए बुरा व्यवहार माना जाता है जो आपने अभी तक नहीं लिखा है? संभवतः TODO टिप्पणियों को अधिक सुरक्षित माना जाएगा?
जवाबों:
मेरा मानना NotImplementedException
है कि वास्तव में यह एक अच्छा अभ्यास है।
वास्तव में, यदि आप एक विधि को लागू करना भूल जाते हैं, और आप इसे बाद में अपनी परियोजना में उपयोग करते हैं (और मुझे विश्वास है, ऐसा होता है), तो आप लंबे समय तक डिबगिंग खर्च कर सकते हैं जो कि कदम से गलत कदम है। यदि आपके पास अपवाद है, तो अपवाद को रोकते हुए, प्रोग्राम सीधे बंद हो जाएगा (यदि आप अपवाद को पकड़ते हैं, तो आपको यह देखकर जल्दी मिल जाएगा कि आपने क्या अपवाद पकड़ा है)।
मैं आपको TODO टिप्पणियों NotImplementedException
के साथ संयुक्त रूप से उपयोग करने की सलाह दूंगा, जिस तरह से आप GUI सहायता (VS में कार्यों के साथ) और प्रोग्राम सुरक्षा को जोड़ते हैं।
रिलीज़ संस्करण के लिए, यह मेरी राय में और भी महत्वपूर्ण है, क्योंकि ज्यादातर मामलों में आप अपने प्रोग्राम को स्पष्ट रूप से ठीक से काम करने के बजाय क्रैश करने के लिए अपने प्रोग्राम को पसंद करेंगे, लेकिन गलत परिणाम उत्पन्न करेंगे।
NotImplementedException
उसी तरह से दिखाता है जैसे कि TODO टिप्पणियां। मुझे लगता है कि यह एक अच्छी सुविधा है।
यह त्रुटियों और त्रुटि हैंडलिंग के आसपास आपके सामान्य दर्शन पर निर्भर करता है। मैं "हार्ड एरर" टाइप का आदमी हूं: मैं थोड़े से संकेत पर एक अपवाद फेंक दूंगा कि कुछ गलत हो सकता है; मैं सब कुछ मुखर कर दूंगा; यदि कोई त्रुटि है, अगर कुछ होने की उम्मीद थी, और यह नहीं है, या यदि कुछ है, और यह नहीं होना चाहिए, तो पूरे ब्रह्मांड को रोकना चाहिए। लाउडस्पीकर के माध्यम से विस्मयबोधक की ध्वनि बजनी चाहिए।
ऐसे अन्य लोग हैं जो त्रुटियों के साथ परेशान नहीं होंगे। तो क्या होगा अगर हम इसे क्लाइंट को भेज दें और पूरी रिपोर्ट मॉड्यूल गायब है क्योंकि हम इसे कोड करना भूल गए हैं, और परीक्षण में किसी को भी इसका एहसास नहीं हुआ, क्योंकि एप्लिकेशन इसके बारे में बहुत चुप था? ग्राहक के चेहरे में एक अपवाद को फेंकने से बेहतर कुछ नहीं!
मैं कहूंगा कि यह एक अच्छा विचार है। आमतौर पर मैं कंकाल कोड द्वारा फेंके गए उन अपवादों को देखता हूं जो किसी प्रपत्र या आरेख या किसी चीज़ से स्वतः उत्पन्न होते हैं। अपवाद मुझे कोड को लागू करने के लिए याद दिलाता है, और यह सुनिश्चित करता है कि अगर मैं स्थापित की गई कार्यक्षमता का उपयोग करने की कोशिश करता हूं तो त्रुटियां होंगी लेकिन कभी भी पूरी तरह से लागू नहीं किया गया है। कभी-कभी मैं इसे बाहर निकाल दूंगा या इसे किसी ऐसी चीज के साथ बदल दूंगा, जो निष्पादन को कम करने की संभावना है (जैसे कि कंसोल को चेतावनी को प्रिंट करना), लेकिन मुझे लगता है कि यह मेरे लिए काम करता है।
यदि आप एक पुस्तकालय का निर्माण कर रहे हैं, जो अन्य लोग इस अपवाद का उपयोग कर रहे हैं, तो विकल्प से बेहतर है, जो आपके पुस्तकालय का एक उपयोगकर्ता होगा जो फ़ंक्शन को कॉल करेगा और सोच रहा होगा कि कुछ भी क्यों नहीं हुआ। बेशक, यह अभी भी एक बुरी तरह से एक भेज दिया पुस्तकालय में इस अपवाद है, लेकिन चुप विफलताओं से बेहतर है, IMO।
मुझे लगता है कि यह अच्छा अभ्यास है। विकल्प एक अमान्य मान या स्थिति का प्रचार कर रहा है, जो परीक्षण और उत्पादन कोड दोनों को प्रभावित करने वाला है।
मैं हमेशा उपयोग करता हूं NotImplementedException
- यही वह सब के लिए है।
यह "असफल उपवास" की अवधारणा से संबंधित है: यदि आपका कोड एक अपवाद फेंक रहा है, तो उसे उत्पादन में जाने से पहले पकड़ा जाना चाहिए। यदि यह उत्पादन करने के लिए मिलता है, तो कम से कम ग्राहक को पता है कि विधानसभा गलत है ।
यदि कोड अर्थहीन मान देता है या, void
विधियों के लिए, कोई कार्रवाई नहीं करता है, तो आपके कोड के उपभोक्ता यथोचित रूप से सोच सकते हैं कि कॉल तब सार्थक था जब वह नहीं था। फिर, बाद में, जब उन्हें कुछ सही कोड मिलते हैं, तो उनका कोड टूट सकता है क्योंकि यह पूर्व के गलत व्यवहार पर निर्भर करता है।
यह किस तरह का प्रोजेक्ट है? काम या घर? घर पर, आप जो चाहें करें - जो कुछ भी आपको याद दिलाता है कि आपको वह पूरा करने की ज़रूरत है जो आप कर रहे हैं।
काम पर, इसे लिखना समाप्त करें।
मैं ऐसी स्थिति नहीं देख सकता, जहां मैं कोड की जांच करूंगा जो अन्य devs, QA या बिल्ड को तोड़ / सकता है।
मैं अपने doxygene autodocing में I लेकिन a \ todo दोनों करता हूं और फिर अपवाद को फेंक देता हूं। इस तरह अगर लोग आरटीएफएम को परेशान नहीं कर सकते हैं तो कम से कम यह पता लगाने में सक्षम होंगे कि उनका कार्यक्रम क्रैश क्यों हुआ, यह सोचने के बजाय कि एक घोषित फ़ंक्शन क्यों है जो तार्किक मान नहीं लौटा रहा है।