2010-02-18 5 views
9

मुझे आश्चर्य है कि क्या "गार्ड स्टेटमेंट" पैराडाइम बनाम "एकल फ़ंक्शन निकास बिंदु" प्रतिमान का उपयोग करने वाली परियोजनाओं की रखरखाव पर कोई शोध (दोनों आरामदायक और मजबूत) रहा है? (सी # में)"गार्ड स्टेटमेंट" बनाम "एकल फ़ंक्शन निकास बिंदु" प्रतिमान की रखरखाव पर कोई भी शोध उपलब्ध है?

गार्ड बयान उदाहरण:

string GetSomeString() 
{ 
    if(necessaryConditionFails) { return null; } 
    if(!FunctionWithBoolReturn(someAttribute)) { return null; } 
    //all necessary conditions have been met 
    //do regular processing... 
    return finalStringValue; 
} 

एकल समारोह निकास बिंदु उदाहरण (सी # में):

string GetSomeString() 
{ 
    string valueToReturn = null; 
    if(necessaryConditionPasses && FunctionWithBoolReturn(someAttribute)) 
    { 
     //all necessary conditions have been met 
     //do regular processing... 
     valueToReturn = finalStringValue; 
    } 
    return valueToReturn; 
} 

मैं गुण और दोनों की असफलताओं जानते इतने पर अंतहीन बहस होती रही है , लेकिन मैं वास्तविक शोध की तलाश में हूं कि प्रत्येक प्रतिमान कितना बनाए रखा जा सकता है *। यह अज्ञात हो सकता है, लेकिन मुझे लगा कि जानकारी वहां मौजूद है, तो एसओ पर कोई यह जान लेगा कि यह कहां था। मेरी वेब खोज अब तक सफल नहीं रही है।

** मैं भी पता है कि (मुझे सहित) कई प्रोग्रामर अपने कोड भर दोनों सिद्धांतों का उपयोग, स्थिति के आधार पर कर रहा हूँ। मैं सिर्फ एक निकास बिंदुओं का अपना कुछ समस्याएं हैं करने के लिए मजबूर है जो एक पसंदीदा प्रतिमान के रूप में उपयोग करने के लिए अधिक से अधिक रख-रखाव के एक सिद्ध ट्रैक रिकॉर्ड है खोजने के लिए उम्मीद कर रहा हूँ। *

+0

व्यापक खोज के बाद, और इस सवाल का एक जवाब में कठिन अनुसंधान करने के लिए लिंक के अभाव को देखते हुए ऐसा लगता है कोई सार्वजनिक रूप से अन्य बनाम एक प्रतिमान के तहत लिखे कोड के रख-रखाव के बारे में सुलभ अनुसंधान नहीं है। – jball

उत्तर

9

पहला यह है कि इससे जटिल निर्माण हो सकते हैं। एक फ़ंक्शन छवि जिसमें आपको फ़ाइल खोलनी है, एक पंक्ति पढ़ें, लाइन को किसी संख्या में कनवर्ट करें और कुछ गलत होने पर उस नंबर या शून्य को वापस कर दें। एक ही बाहर निकलने के बिंदु के साथ, यदि आप खुले सफल होते हैं, तो फ़ाइल को खुले सफल होने पर, यदि फ़ाइल सफल हो जाती है, तो यदि आप सफलता को मान को पूर्णांक में परिवर्तित करते हैं, तो आप बहुत सारे नेस्टेड का उपयोग कर समाप्त करते हैं, जो आपके कोड को अपठनीय बनाता है। इसमें से कुछ को फ़ंक्शन के अंत में एक लेबल होने और गेटो का उपयोग करके हल किया जा सकता है (हमें अतीत में इसका उपयोग करना पड़ा क्योंकि हमने एकल निकास बिंदु और पसंदीदा पठनीयता का भी उपयोग किया था) लेकिन यह आदर्श नहीं है।

दूसरा, अगर आप अपवाद का उपयोग कर रहे आप अगर आप अपने एकल निकास बिंदु फिर से चाहते हैं सब कुछ को पकड़ने के लिए मजबूर हैं।

तो, व्यक्तिगत रूप से, मैं डाल पसंद करते हैं चेकों के बहुत सारे (और इस बात पर ज़ोर) शुरुआत में और समारोह के निष्पादन के दौरान, और मुसीबत का पहला संकेत पर समारोह से बाहर निकलें।

+13

+1 "एकल निकास बिंदु" के समर्थकों को शायद ही कभी यह महसूस होता है कि प्रत्येक स्थान जहां एक अपवाद फेंक दिया जा सकता है, एक संभावित निकास बिंदु है। लगता है कि सिफारिशों की उत्पत्ति विनाशकों, auto_ptr, कचरा संग्रह से पहले बुरे पुराने दिनों से आई है, और "आखिरकार" यह सुनिश्चित करने के लिए बहुत आसान हो गया है कि आपका कोड स्वयं के बाद साफ हो जाए। – Theran

+2

मुझे लगता है कि खुली फ़ाइल रीडर बिल्कुल परिदृश्य है जहां कोई एकल निकास बिंदु करना चाहता है: अपनी फ़ाइल के शीर्ष पर आप एक वैरिएबल को रिटर्न वैल्यू रखने के लिए परिभाषित करते हैं, तो आपके पास कई घोंसले वाले ब्लॉक होते हैं। बाहरी सबसे ज्यादा फाइल खोल रहा है। यदि खुला विफल रहता है तो आप रिटर्न वैल्यू के रूप में स्टेटस कोड सेट करते हैं, अन्यथा आप खुली फ़ाइल के साथ काम करते हैं और अंत में आप फ़ाइल और फ्री मेमोरी बंद करते हैं। चूंकि ब्लॉक के माध्यम से हर पथ निकट फ़ाइल कोड को दबाएगा, इसलिए आप कोई रिसाव सुनिश्चित नहीं करते हैं (जैसा कि प्रत्येक निकास बिंदु पर मुक्त संसाधनों का सामना करना पड़ता है और रिसाव का जोखिम होता है)। –

+0

@ कॉन्स्टेंटिन नारीशकिन जो अंततः इसके लिए क्या लगता है। यह सुनिश्चित करना कि फ़ाइल बंद करने जैसे कुछ हमेशा होता है। साथ ही, मैं एफ # में देख रहा था और मैं वास्तव में [गणना भाव] (http://msdn.microsoft.com/en-us/library/dd233182.aspx) क्या है इस को हल करने के रास्ते में की पेशकश करने की तरह समस्या की तरह(इसी तरह हास्केल में मोनैड के साथ) – Steve

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