मैं सोच रहा था कि क्या मुझे विधि कॉल के रिटर्न मान के खिलाफ यह कहकर सत्यापित करना चाहिए कि वे मेरी अपेक्षाओं को पूरा करते हैं, भले ही मुझे पता हो कि जिस पद्धति से मैं बुला रहा हूं वह ऐसी अपेक्षाओं को पूरा करेगा।
दिया हुआ
User getUser(Int id)
{
User temp = new User(id);
temp.setName("John");
return temp;
}
क्या मुझे करना चाहिए
void myMethod()
{
User user = getUser(1234);
System.out.println(user.getName());
}
या
void myMethod()
{
User user = getUser(1234);
// Validating
Preconditions.checkNotNull(user, "User can not be null.");
Preconditions.checkNotNull(user.getName(), "User's name can not be null.");
System.out.println(user.getName());
}
मैं यह वैचारिक स्तर पर पूछ रहा हूं। अगर मुझे पता है कि मैं किस विधि को बुला रहा हूं, उसके आंतरिक कामकाज को। या तो इसलिए कि मैंने इसे लिखा या मैंने इसका निरीक्षण किया। और संभावित मूल्यों के तर्क यह मेरे पूर्व शर्त से मिलते हैं। क्या मान्यता को छोड़ना "बेहतर" या "अधिक उचित" है, या क्या मुझे अभी भी गलत तरीकों से आगे बढ़ने से पहले बचाव करना चाहिए, जो मैं वर्तमान में लागू कर रहा हूं, भले ही वह हमेशा पास हो।
सभी उत्तरों से मेरा निष्कर्ष (अपने स्वयं के लिए स्वतंत्र महसूस करें):
जब जोर देना- विधि ने अतीत में दुर्व्यवहार दिखाया है
- विधि एक अविश्वसनीय स्रोत से है
- इस पद्धति का उपयोग अन्य स्थानों से किया जाता है, और यह स्पष्ट रूप से नहीं बताती है कि यह पोस्ट की स्थिति है
- विधि आपके करीब रहती है (विवरण के लिए चुने गए उत्तर देखें)
- यह विधि स्पष्ट रूप से यह परिभाषित करती है कि यह उचित डॉक्टर, प्रकार की सुरक्षा, एक इकाई परीक्षण, या बाद की स्थिति की जांच जैसी किसी चीज के साथ अनुबंधित है
- प्रदर्शन महत्वपूर्ण है (किस स्थिति में, डिबग मोड मुखर हाइब्रिड दृष्टिकोण के रूप में काम कर सकता है)
Null
) पर ध्यान क्यों दे रहे हैं ? यह शायद उतना ही समस्याग्रस्त है अगर नाम है ""
(शून्य नहीं है लेकिन खाली स्ट्रिंग है) या "N/A"
। या तो आप परिणाम पर भरोसा कर सकते हैं, या आपको उचित रूप से पागल होना होगा।