सबसे पहले: एक ही बयान में बहुत ज्यादा काम नहीं है। यदि आपके पास एक पंक्ति में बड़ी संख्या में डेरफ्रेंसिंग ऑपरेशंस हैं, तो यह अपराधी को खोजने के लिए अधिक होगा। Law of Demeter इसके साथ भी मदद करता है - अगर आपके पास order.SalesClerk.Manager.Address.Street.Length
जैसा कुछ है तो आपको अपवाद मिलने पर बहुत से विकल्प मिलेंगे। (मैं नहीं Demeter के कानून के बारे में लकीर का फकीर बना हूँ, लेकिन कम मात्रा में सब कुछ ...)
दूसरी बात: as
का उपयोग करने पर कास्टिंग पसंद करते हैं, जब तक यह वैध है वस्तु एक अलग प्रकार का है, जो सामान्य रूप से होने के लिए तुरंत बाद में एक शून्य जांच शामिल है। तो यहाँ:
// What if foo is actually a Control, but we expect it to be String?
string text = foo as string;
// Several lines later
int length = text.Length; // Bang!
यहाँ हम एक NullReferenceException प्राप्त होता है और अंत में यह text
करने के लिए वापस ट्रेस कर अशक्त जा रहा है - लेकिन फिर आप चाहे उसकी वजह foo
अशक्त था पता नहीं होता, या क्योंकि यह एक अप्रत्याशित प्रकार था। यह सच में, सच एक string
होना चाहिए, तो बजाय डाली:
string text = (string) foo;
अब आप दो स्थितियों के बीच अंतर बताने में सक्षम हो जाएगा।
तीसरा: के रूप में अन्य लोगों ने कहा, अपने डेटा को मान्य - आम तौर पर सार्वजनिक और संभावित आंतरिक एपीआई के लिए तर्क। मैं Noda Time में पर्याप्त जगहों पर ऐसा करता हूं कि मुझे जांच अस्वीकार करने में मदद करने के लिए एक उपयोगिता वर्ग है। इसलिए उदाहरण (Period
से) के लिए:
internal LocalInstant AddTo(LocalInstant localInstant,
CalendarSystem calendar, int scalar)
{
Preconditions.CheckNotNull(calendar, "calendar");
...
}
आप चाहिए दस्तावेज़ क्या कर सकते हैं और, नल नहीं हो सकता भी।
स्रोत
2012-04-12 16:57:51
शून्य मूल्यों के लिए हमेशा उदारतापूर्वक 'जोर दें'। – leppie
@leppie - यह बहुत ज़ोरदार है! हां, मैं ऐसा कर सकता था लेकिन मैं खाता परिस्थितियों को ध्यान में रखना एक और अधिक सुरुचिपूर्ण समाधान की उम्मीद कर रहा था जैसे कि मुझे ऐसा करना भूल जाता है :) –
प्रोटिप: आपको विधियों को छोटा रखें (अधिकतम 10-20 लाइनें कहें), तो आपको वास्तव में लाइन नंबरों की आवश्यकता नहीं है । – leppie