मुझे अपनी कंपनी के कोडबेस (.NET 3.5 एप्लीकेशन) में निम्नलिखित कोड पैटर्न सभी जगह दिखाई देते हैं:
bool Foo(int barID, out Baz bazObject) {
try {
// do stuff
bazObject = someResponseObject;
return true;
}
catch (Exception ex) {
// log error
return false;
}
}
// calling code
BazObject baz = new BazObject();
fooObject.Foo(barID, out baz);
if (baz != null) {
// do stuff with baz
}
मैं अपने सिर को चारों ओर लपेटने की कोशिश कर रहा हूं कि ऐसा करने के बजाय आप ऐसा क्यों करेंगे क्योंकि Foo
विधि केवल आईडी लेती है और एक Baz
वस्तु लौटाती है, इसके बजाय एक मूल्य वापस नहीं किया जाता है जिसका उपयोग नहीं किया जाता है और वास्तविक वस्तु एक रेफ या आउटपुट पैरामीटर होता है।
क्या इस कोडिंग शैली का कुछ छिपा हुआ लाभ है जो मुझे याद आ रहा है?
baz
किया जा रहा है null
और वापस आ bool
जा रहा है false
कर रहे हैं नहीं के बराबर। new BazObject()
ऐसा कभी नहीं होता है null
, इसलिए जब तक bazObject
इसे Exception
फेंका नहीं जाता है Foo
, जब false
लौटाया जाता है , तब तक इसे अपडेट baz
नहीं किया जाएगा null
। यह काफी मदद मिलेगी अगर कल्पना के लिए Foo
उपलब्ध थे। वास्तव में, यह इस कोड द्वारा प्रदर्शित सबसे गंभीर समस्या है।