2012-01-18 15 views
23

मैं इस विधि (संशोधित कोड) है:एक शून्य विधि से बाहर निकलें?

public static void PublishXmlForCustomTypes(MyOwnClass DefaultOutputInformation) 
{ 
    if (DefaultOutputInformation != null) 
    { 
     ///lot of code 
    } 
} 

और मेरे पूरे कोड अगर बयान के अंदर था और इस बारे में सोच के बाद, मैं इस के लिए बदल दिया: जहाँ तक

public static void PublishXmlForCustomTypes(MyOwnClass DefaultOutputInformation) 
{ 
    if (DefaultOutputInformation == null) 
    { 
     return; 
    } 
    ///lot of code 
} 

के रूप में मैं परीक्षण किया यह, यह कड़ाई से समतुल्य प्रतीत होता है लेकिन वास्तव में यह मामला है? मेरा मतलब है, "वापसी" कथन हमें विधि से बाहर ले जाता है?

उत्तर

36

इस सख्ती से बराबर है और दूसरे संस्करण में जाने के लिए :)

+0

क्या कोई छुपा मामला नहीं है जहां यह समकक्ष नहीं होगा? –

+0

सहमत हुए, और ऊपर उठाने। यदि आप अपने आईएफ ब्लॉक का दायरा जितना संभव हो उतना छोटा हो, तो अपने आप और दूसरों को जो इसे बाद में बनाए रखना आसान होगा, भले ही कार्यात्मक रूप से इससे कोई फर्क नहीं पड़ता। –

+0

@ जेरेमी तालिओ: नहीं, ऐसा नहीं है। – BoltClock

1

हाँ, अपनी मान्यताओं सही है तरीका है।

कुछ पृष्ठभूमि के लिए, duality के बारे में जानें।

+0

उन सभी साइटों में से जिन्हें आप विकिपीडिया चुनते हैं। –

+0

@AshBurlaczenko: कल यह उत्तर उपयोगी होगा :) – leppie

1

हाँ, यह बिल्कुल वैसा ही है, तो आप पूरी तरह से समझने के लिए कीवर्ड वापसी के बारे में MSDN दस्तावेज़ पढ़ सकते हैं कि यह कैसे काम करता है: http://msdn.microsoft.com/en-us/library/1h3swy84.aspx

के रूप में तय करने के लिए जो तरीका बेहतर है: दोनों अच्छे हैं, लेकिन दूसरे संस्करण इसे और अधिक पठनीय बनाता है क्योंकि तब आपका पूरा कोड एक ब्लॉक के अंदर नहीं है। इस तरह, आप देख सकते हैं कि विधि के पूरे कोड को पढ़ने के बजाय स्थिति वास्तव में आसानी से क्या करती है।

4

हाँ return आपको विधि से बाहर ले जाता है; अगर आपके पास finally ब्लॉक है और आप try ब्लॉक से वापस कॉल करते हैं, तो finally ब्लॉक को वैसे भी निष्पादित किया जाता है।

7

हाँ, यह बिल्कुल ठीक है।

कुछ लोग dogmatically "प्रति निकास बिंदु प्रति विधि" से चिपके रहते हैं - जो उचित था जब यह सुनिश्चित करने के लिए अपेक्षाकृत मुश्किल था कि आपने सी में किसी फ़ंक्शन के अंत में हमेशा सही मात्रा में साफ-सफाई की है। .. लेकिन यह सी # में वास्तव में आवश्यक नहीं है।

व्यक्तिगत रूप से मुझे लगता है कि जैसे ही आप जानते हैं कि आपने वास्तव में एक विधि में जो काम करना चाहते हैं, उसे वापस करने के लिए उचित है। try/finally या using कथन का उपयोग किसी भी अतिरिक्त "क्लीन अप हालांकि मैं बाहर निकलने" काम करने के लिए करता हूं।

+0

मैं एक-बाहर निकलने-बिंदु-प्रति-विधि समर्थकों के खिलाफ आया हूं। मैं उनके मकसद को समझता हूं, लेकिन इसके परिणामस्वरूप कुछ गंभीरता से बदसूरत कोड हो सकता है। – ColinE

+0

मैं अब तक एक dogmatic लोगों में से एक था, मुझे लगता है कि आदत का मामला था। – ThePower

+0

@ThePower आदत कुछ ऐसा है जो स्वाभाविक रूप से हमारे लिए आता है। इसे तोड़ने के लिए आपको कुडोस ;-) – ColinE

1

वास्तव में return आपको विधि से बाहर कर देता है, इसलिए यह आपके द्वारा उपयोग किए जाने वाले पहले तरीके के बराबर है। कौन सा तरीका बेहतर है आपके कोड पर निर्भर करता है, हालांकि आम तौर पर मैं दूसरा संस्करण पसंद करूंगा।

2

हां, वापसी कथन विधि समाप्त होता है।

2

हां, वापसी आपको कोड से बाहर निकल जाएगी। यह आमतौर पर एक अच्छा कार्य है क्योंकि यह सुनिश्चित करने के लिए कि एक पैरामीटर में पारित पैरामीटर वे हैं जो आपको लगता है कि वे हैं और बाहर निकलें (वापसी के माध्यम से या अपवाद फेंकना) ताकि आप केवल अनावश्यक प्रसंस्करण न करें समारोह में बाद में निरस्त करना होगा।

1

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

पढ़ने योग्य/रखरखाव कोड ट्रान्स नैनो-सेकंड प्रदर्शन के 99% समय।

संबंधित मुद्दे