क्या रूबी में स्पष्ट रूप से वापसी करना अच्छी शैली है?


155

पायथन पृष्ठभूमि से आ रहा है, जहां हमेशा "ऐसा करने का सही तरीका" ("पायथोनिक" तरीका) जब शैली की बात आती है, तो मैं सोच रहा हूं कि क्या रूबी के लिए भी यही मौजूद है। मैं अपने स्वयं के स्टाइल दिशानिर्देशों का उपयोग कर रहा हूं, लेकिन मैं अपने स्रोत कोड को जारी करने के बारे में सोच रहा हूं, और मैं चाहूंगा कि यह किसी भी अलिखित नियमों का पालन करें जो मौजूद हैं।

क्या यह स्पष्ट रूप returnसे तरीकों में टाइप करने के लिए "द रूबी वे" है ? मैंने इसे बिना और उसके साथ किया है, लेकिन क्या इसे करने का एक सही तरीका है? क्या ऐसा करने का कोई सही समय है? उदाहरण के लिए:

def some_func(arg1, arg2, etc)
  # Do some stuff...
  return value # <-- Is the 'return' needed here?
end

3
यह एक बहुत पुराना सवाल है, लेकिन उन लोगों के लिए जिनके पास इसी तरह के सवाल हैं, द बुक एलक्वेंट रूबी की अत्यधिक अनुशंसा की जाती है। यह एक शैली गाइड नहीं है जितना कि मुहावरेदार रूबी लिखने के लिए एक परिचय। काश और लोग इसे पढ़ते!
ब्रायन डियर

रूबी में विकसित एक बड़ी विरासत ऐप विरासत में मिली किसी के रूप में, मैं बहुत सराहना करता हूं कि आपने यह सवाल पूछा। यह एक उत्थान के योग्य है। यह हमारी पूरी विरासत ऐप में शामिल है। इस टीम पर मेरा एक काम कोडबेस (रूबी के लिए नया होने पर कठिन) में सुधार करना है।
स्टीवर्स

जवाबों:


226

पुराना (और "उत्तर") प्रश्न, लेकिन मैं उत्तर के रूप में अपने दो सेंट में टॉस करूंगा।

TL; DR - आपके पास नहीं है, लेकिन यह कुछ मामलों में आपके कोड को बहुत अधिक स्पष्ट कर सकता है।

यद्यपि स्पष्ट रिटर्न का उपयोग नहीं करना "रूबी तरीका" हो सकता है, यह अपरिचित कोड के साथ काम करने वाले प्रोग्रामर को भ्रमित कर रहा है, या रूबी की इस विशेषता से अपरिचित है।

यह कुछ हद तक विरोधाभासी उदाहरण है, लेकिन इस तरह के एक छोटे से कार्य होने की कल्पना करें, जो एक संख्या को पारित कर देता है, और इसे एक उदाहरण चर पर असाइन करता है।

def plus_one_to_y(x)
    @y = x + 1
end

क्या इसका मतलब एक ऐसा समारोह होना था जो एक मूल्य लौटाता था, या नहीं? यह वास्तव में कहना मुश्किल है कि डेवलपर का क्या मतलब है, क्योंकि यह दोनों उदाहरण चर को असाइन करता है, और निर्दिष्ट मान भी लौटाता है।

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

def plus_one_to_y(x)
    @y = x + 1
    puts "In plus_one_to_y"
end

यदि कुछ भी लौटाए गए मूल्य की अपेक्षा करता है, तो अब फ़ंक्शन टूट गया है । यदि कुछ भी लौटाए गए मूल्य की अपेक्षा नहीं करता है, तो यह ठीक है। स्पष्ट रूप से अगर कहीं और कोड श्रृंखला के नीचे है, तो यह कहते हुए कुछ वापस लौटाए गए मूल्य की अपेक्षा कर रहा है, यह विफल होने जा रहा है क्योंकि यह वापस नहीं मिल रहा है जो कि उम्मीद करता है।

असली सवाल अब यह है: क्या कुछ भी वास्तव में एक लौटे मूल्य की उम्मीद करता है? इसने कुछ तोड़ा या नहीं? क्या यह भविष्य में कुछ तोड़ देगा? कौन जाने! सभी कॉल की केवल एक पूर्ण कोड समीक्षा आपको बताएगी।

तो मेरे लिए कम से कम, सबसे अच्छा अभ्यास दृष्टिकोण या तो बहुत स्पष्ट है कि आप कुछ वापस कर रहे हैं अगर यह मायने रखता है, या कुछ भी नहीं होने पर वापस लौटें।

तो हमारे छोटे डेमो फ़ंक्शन के मामले में, यह मानते हुए कि हम इसे एक मूल्य वापस करना चाहते हैं, यह इस तरह लिखा जाएगा ...

def plus_one_to_y(x)
    @y = x + 1
    puts "In plus_one_to_y"
    return @y
end

और यह किसी भी प्रोग्रामर के लिए बहुत स्पष्ट होगा कि यह एक मूल्य लौटाता है, और उनके लिए इसे साकार किए बिना इसे तोड़ना बहुत कठिन है।

वैकल्पिक रूप से, कोई इसे इस तरह लिख सकता है और रिटर्न स्टेटमेंट को छोड़ सकता है ...

def plus_one_to_y(x)
    @y = x + 1
    puts "In plus_one_to_y"
    @y
end

लेकिन शब्द वापस छोड़ने से क्यों परेशान हैं? क्यों न इसे वहां लगाया जाए और इसे 100% स्पष्ट किया जाए कि क्या हो रहा है? यह सचमुच आपके कोड प्रदर्शन करने की क्षमता पर कोई प्रभाव नहीं पड़ेगा।


6
दिलचस्प बिंदु। मुझे लगता है कि मैं वास्तव में एक ऐसी स्थिति में भाग गया था जब मैंने यह सवाल पूछा था, जहां मूल डेवलपर ने अपने कोड में निहित वापसी मूल्य का उपयोग किया था, और यह समझना बहुत मुश्किल था कि क्या हो रहा था। आपके उत्तर के लिए धन्यवाद!
साशा चेदिगोव

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

16
हालांकि, यह सच है कि कोड को पठनीय होना ज़रूरी है, क्रियात्मकता के पक्ष में एक प्रोग्रामिंग लैंग्वेज की एक जानी-मानी विशेषता को समझना, मेरी राय में, बुरा व्यवहार है। यदि कोई डेवलपर रूबी से परिचित नहीं है, तो शायद कोड को छूने से पहले उन्हें परिचित होना चाहिए। मुझे यह थोड़ा सा मूर्खतापूर्ण लगता है कि भविष्य की घटना के लिए मुझे अपने कोड की अव्यवस्था को बढ़ाना होगा कि कुछ गैर-रूबी डेवलपर को बाद में कुछ करना होगा। हमें किसी भाषा को निम्नतम सामान्य भाजक से कम नहीं करना चाहिए। रूबी की सुंदरता का एक हिस्सा यह है कि हमें कुछ कहने के लिए कोड की 5 लाइनों का उपयोग करने की आवश्यकता नहीं है जो केवल 3. लेनी चाहिए
ब्रायन डियर

25
यदि शब्द returnकोड में अर्थ अर्थ जोड़ता है, तो क्यों नहीं? यह शायद ही बहुत क्रिया है - हम 5 लाइनों बनाम 3 की बात नहीं कर रहे हैं, बस एक और शब्द। मैं returnकम से कम फ़ंक्शंस में देखना चाहूंगा (शायद ब्लॉकों में नहीं) ताकि यह व्यक्त करने के लिए कि वास्तव में कोड क्या करता है। कभी-कभी आपको मध्य-समारोह में लौटना पड़ता है - अंतिम returnकीवर्ड को अंतिम पंक्ति पर न छोड़ें क्योंकि आप कर सकते हैं। मैं बिल्कुल भी पक्षपात का समर्थन नहीं करता, लेकिन मैं निरंतरता के पक्ष में हूं।
mindplay.dk

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

66

नहीं। अच्छी रूबी शैली आम तौर पर केवल शुरुआती रिटर्न के लिए एक स्पष्ट रिटर्न का उपयोग करेगी । रूबी कोड अतिसूक्ष्मवाद / अंतर्निहित जादू पर बड़ा है।

कहा कि, अगर एक स्पष्ट वापसी चीजों को स्पष्ट, या पढ़ने में आसान बनाती है, तो इससे कुछ भी नुकसान नहीं होगा।


116
यदि यह भ्रम अधिकतमता में परिणत होता है तो कोड अतिसूक्ष्मवाद क्या है?
जोंनोमो

@JonCrowell इसके बजाय प्रलेखन अधिकतमवाद का परिणाम होना चाहिए।
जैजपी

29
@jazzpi यदि आपको अपने कोड को भारी मात्रा में प्रलेखित करना है तो यह अच्छी तरह से समझ लें कि आप अतिसूक्ष्मवाद का अभ्यास नहीं कर रहे हैं, आप कोड गोल्फ का अभ्यास कर रहे हैं ।
Schwern

2
यह अंतिम रिटर्न को बाहर करने के लिए भ्रमित नहीं है, यह इसे भ्रमित करने के लिए है - एक रूबी डेवलपर के रूप में, returnपहले से ही फ़ंक्शन के लिए एक अतिरिक्त अर्थ के रूप में एक महत्वपूर्ण अर्थ है।
डेवोन पार्सन्स 16

14
@DevonParsons कैसे पृथ्वी पर किसी returnको भी अंतिम पंक्ति के रूप में वैसे भी भ्रमित कर सकता है?
दारथपागिहस

31

मैं व्यक्तिगत रूप से returnकीवर्ड का उपयोग करता हूं, जो कि मैं कार्यात्मक विधियों , अर्थात मुख्य रूप से उनके वापसी मूल्य के लिए निष्पादित की जाने वाली विधियों , और प्रक्रियात्मक तरीकों को मुख्य रूप से उनके दुष्प्रभावों के लिए निष्पादित करने के बीच अंतर करने के लिए उपयोग करता हूं । इसलिए, ऐसे तरीके जिनमें रिटर्न वैल्यू महत्वपूर्ण है, returnरिटर्न वैल्यू पर ध्यान आकर्षित करने के लिए एक अतिरिक्त कीवर्ड प्राप्त करें ।

मैं फोन करते समय समान अंतर का उपयोग करता हूं : कार्यात्मक तरीकों में कोष्ठक मिलते हैं, प्रक्रियात्मक तरीके नहीं होते हैं।

और अंतिम लेकिन कम से कम नहीं, मैं ब्लॉकों के साथ उस अंतर का भी उपयोग करता हूं: कार्यात्मक ब्लॉकों को घुंघराले ब्रेसिज़ मिलते हैं, प्रक्रियात्मक ब्लॉक (यानी ऐसे ब्लॉक जो "कुछ" करते हैं) मिलता है do/ end

हालांकि, मैं इसके बारे में धार्मिक नहीं होने की कोशिश करता हूं: ब्लॉकों के साथ, घुंघराले ब्रेसिज़ और do/ endमें अलग-अलग पूर्वता है, और एक अभिव्यक्ति को स्पष्ट करने के लिए स्पष्ट कोष्ठक जोड़ने के बजाय, मैं सिर्फ दूसरी शैली पर स्विच करता हूं। वही विधि कॉलिंग के लिए जाता है: यदि पैरामीटर सूची के चारों ओर कोष्ठक जोड़ने से कोड अधिक पठनीय हो जाता है, तो मैं इसे करता हूं, भले ही प्रश्न में विधि प्रकृति में प्रक्रियात्मक हो।


1
अभी मैं किसी भी "वन-लाइनर्स" में वापसी को छोड़ देता हूं, जो आप कर रहे हैं, उसी के समान है, और मैं बाकी सब कुछ वैसा ही करता हूं। यह जानकर अच्छा लगा कि मैं अपनी शैली में पूरी तरह से नहीं हूं। :)
साशा चोडगोव

@ जोर्ग: क्या आप अपने कोड में शुरुआती रिटर्न का उपयोग करते हैं? क्या यह आपकी प्रक्रियात्मक / कार्यात्मक योजना के साथ कोई भ्रम पैदा करता है?
एंड्रयू ग्रिम

1
@ और ग्रिम: हाँ, और हाँ। मैं इसे निष्क्रिय करने की सोच रहा हूं। मेरे तरीकों का विशाल बहुमत संदर्भात्मक रूप से पारदर्शी / शुद्ध / कार्यात्मक / जो भी आप इसे वैसे भी कॉल करना चाहते हैं, इसलिए यह वहाँ छोटे रूप का उपयोग करने के लिए समझ में आता है। और कार्यात्मक शैली में लिखे गए तरीकों में शुरुआती रिटर्न नहीं होता है, क्योंकि इससे "चरण" की धारणा का पता चलता है, जो बहुत कार्यात्मक नहीं है। हालाँकि, मुझे बीच में रिटर्न पसंद नहीं है। मैं या तो उन्हें शुरुआत में गार्ड के रूप में या अंत में नियंत्रण प्रवाह को सरल बनाने के लिए उपयोग करता हूं।
जोर्ग डब्ल्यू मित्तग

शानदार उत्तर, लेकिन इसके साथ प्रक्रियात्मक तरीकों () और कार्यात्मक तरीकों को कॉल करने के लिए वास्तव में बेहतर अभ्यास है - बिना मेरे जवाब के नीचे देखें
एलेक्स डीन

13

वास्तव में महत्वपूर्ण बात यह है:

  1. कार्य - उनके वापसी मूल्य के लिए निष्पादित तरीके
  2. प्रक्रियाएं - उनके दुष्प्रभावों के लिए निष्पादित तरीके

रूबी के पास इनको अलग करने का एक मूल तरीका नहीं है - जो आपको एक प्रक्रिया लिखने के लिए असुरक्षित बनाता है side_effect()और एक अन्य डेवलपर आपकी प्रक्रिया के निहित रिटर्न मूल्य का दुरुपयोग करने का निर्णय लेता है (मूल रूप से इसे एक अशुद्ध कार्य के रूप में माना जाता है)।

इसे हल करने के लिए, स्काला और हास्केल की पुस्तक से एक पत्ता लें और अपनी प्रक्रियाओं को स्पष्ट रूप से लौटाएं nil(उर्फ Unitया ()अन्य भाषाओं में)।

यदि आप इसका अनुसरण करते हैं, तो स्पष्ट returnवाक्यविन्यास का उपयोग करना या न करना केवल व्यक्तिगत शैली का मामला बन जाता है।

कार्यों और प्रक्रियाओं के बीच अंतर करने के लिए:

  1. घुंघराले ब्रेसिज़ के साथ कार्यात्मक ब्लॉक लिखने के साथ जॉग डब्ल्यू डब्ल्यू मित्तग का अच्छा विचार, और प्रक्रियात्मक ब्लॉकों के साथ do/end
  2. जब आप कार्यविधियों का आह्वान करते हैं (), तब उपयोग करते हैं , जब आप कार्य करते हैं, तो नहीं

ध्यान दें कि Jörg W Mittag ने वास्तव में दूसरे तरीके की वकालत की - ()प्रक्रियाओं के लिए एस से परहेज - लेकिन यह उचित नहीं है क्योंकि आप साइड इफेक्टिंग विधि चाहते हैं कि चर से स्पष्ट रूप से अलग हो, खासकर जब एरिटी 0. है। विधि मंगलाचरण के लिए स्केल स्टाइल गाइड देखें विवरण।


अगर मुझे लौटे हुए मूल्य की आवश्यकता है function_a, और function_aकॉल करने के लिए लिखा गया था (और केवल कॉल करके काम कर सकता है) procedure_b, तो क्या यह function_aवास्तव में एक फ़ंक्शन है? यह मानों को लौटाता है, कार्यों के लिए आपकी आवश्यकता को पूरा करता है, लेकिन इसका एक दुष्प्रभाव है, प्रक्रियाओं की आवश्यकताओं को पूरा करना।
डेवोन पार्सन्स

2
आप सही डेवॉन हैं - function_aइसमें procedure_...कॉल का एक पेड़ हो सकता है , क्योंकि वास्तव procedure_aमें function_...कॉल का एक पेड़ हो सकता है । स्काला की तरह लेकिन हास्केल के विपरीत, रूबी में कोई गारंटी नहीं हो सकती है कि कोई फ़ंक्शन साइड-इफेक्टिंग नहीं है।
एलेक्स डीन

8

शैली मार्गदर्शिका बताती है, कि आपको returnअपने अंतिम विवरण का उपयोग नहीं करना चाहिए । आप अभी भी इसका उपयोग कर सकते हैं यदि यह अंतिम नहीं है । यह उन सम्मेलनों में से एक है जिसका समुदाय कड़ाई से पालन करता है, और यदि आपको रूबी का उपयोग करने के लिए किसी के साथ सहयोग करने की योजना है, तो आपको ऐसा करना चाहिए।


यह कहा जा रहा है, स्पष्ट returnएस का उपयोग करने के लिए मुख्य तर्क यह है कि यह अन्य भाषाओं से आने वाले लोगों के लिए भ्रमित है।

  • सबसे पहले, यह रूबी के लिए पूरी तरह से अनन्य नहीं है। उदाहरण के लिए पर्ल के निहितार्थ रिटर्न भी हैं।
  • दूसरे, यह लागू होने वाले अधिकांश लोग अल्गोल भाषाओं से आ रहे हैं। ज्यादातर वे रूबी की तुलना में "निचले स्तर" के हैं , इसलिए आपको कुछ करने के लिए अधिक कोड लिखना होगा।

जावा में विधि लंबाई (गेटर्स / सेटर को छोड़कर) के लिए एक सामान्य अनुमानी एक स्क्रीन है । उस स्थिति में, आप विधि की परिभाषा नहीं देख रहे हैं और / या पहले ही भूल गए हैं कि आप कहाँ से लौट रहे थे।

दूसरी ओर, रूबी में 10 लाइनों से कम लंबी विधियों के लिए छड़ी करना सबसे अच्छा है । यह देखते हुए, किसी को आश्चर्य होगा कि उसे ~ 10% अधिक कथन क्यों लिखने हैं, जब वे स्पष्ट रूप से निहित होते हैं।


चूंकि रूबी में शून्य विधियां नहीं हैं और सब कुछ इतना अधिक संक्षिप्त है, आप स्पष्ट लाभ के साथ जाने पर किसी भी लाभ के लिए ओवरहेड जोड़ रहे हैं return


1
"यह उन सम्मेलनों में से एक है जिसका समुदाय सख्ती से पालन करता है" मेरा अनुभव यह है कि नहीं, जब तक वे बहुत अनुभवी रूबी डेवलपर्स नहीं हैं, तब तक लोग इसका कड़ाई से पालन नहीं करते हैं।
टिम होल

1
@TimHolt मैं तब बहुत भाग्यशाली रहा होगा। (:
ndnenkov

1
@ और पूरी तरह से सहमत हैं। महत्वपूर्ण बात यह है कि जब एक विधि (या वर्ग) 5/100 लाइनों से अधिक होने लगती है, तो यह एक अच्छा विचार है कि आप जो पूरा करने की कोशिश कर रहे हैं उस पर पुनर्विचार करें। वास्तव में सैंडी के नियम कोड के बारे में सोचने के लिए एक संज्ञानात्मक रूपरेखा हैं, जो एक मनमानी हठधर्मिता के विपरीत है। मेरे द्वारा सामना किए गए अधिकांश कोड समस्याग्रस्त नहीं हैं क्योंकि यह कृत्रिम रूप से विवश है - यह आमतौर पर विपरीत है - कई जिम्मेदारियों के साथ कक्षाएं, कई वर्गों की तुलना में लंबे समय तक चलने वाले तरीके। अनिवार्य रूप से बहुत से लोग "शार्क को कूदते हैं" - जिम्मेदारियों को मिलाते हुए।
ब्रायन डियर

1
कभी-कभी सम्मेलन अभी भी एक बुरा विचार है। इसका एक शैलीगत सम्मेलन जो जादू पर निर्भर करता है, वापसी के अनुमान लगाने में मुश्किल बनाता है। 7 कीस्ट्रोक्स को बचाने के अलावा कोई लाभ नहीं देता है और लगभग सभी अन्य भाषाओं के साथ असंगत है। अगर रूबी कभी पायथन 3 शैली समेकन और सरलीकरण पास करती है, तो मुझे उम्मीद है कि कटा हुआ ब्लॉक पर कुछ भी पहले होगा।
शायन

2
स्पष्ट रूप से छोड़कर यह वास्तव में चीजों को पढ़ना आसान नहीं बनाता है! जादू और समझदारी अमीरी चीज नहीं है।
शायनी

4

मैं बेन ह्यूजेस के साथ सहमत हूं और टिम होल्ट से असहमत हूं, क्योंकि प्रश्न में निश्चित तरीके से उल्लेख किया गया है कि पायथन यह करता है और पूछता है कि क्या रूबी का एक समान मानक है।

ऐसा होता है।

यह भाषा की ऐसी जानी-मानी विशेषता है कि किसी को भी माणिक में किसी समस्या के बारे में बहस करने की उम्मीद की जानी चाहिए।


3
मैं सिद्धांत रूप में आपके साथ सहमत हूं, लेकिन व्यवहार में, प्रोग्रामर गलती करते हैं और गड़बड़ करते हैं। बिंदु में मामला, हम सभी जानते हैं कि आप सशर्त "" = "का उपयोग करते हैं और" = "नहीं, लेकिन हम सभी ने पहले वह गलती की है और बाद तक इसका एहसास नहीं किया है।
टिम होल्ट

1
@TimHolt मैं किसी विशेष उपयोग के मामले को संबोधित नहीं कर रहा हूं, मैं सिर्फ सवाल का जवाब दे रहा हूं। यह स्पष्ट रूप से खराब शैली है, जैसा कि समुदाय द्वारा चुना जाता है, returnअनावश्यक का उपयोग करते समय कीवर्ड का उपयोग करने के लिए ।
डेवोन पार्सन्स

3
काफी उचित। मैं कह रहा हूं कि आपके द्वारा उल्लिखित शैली गलतियाँ हो सकती है यदि आप सावधान नहीं हैं। अपने अनुभव के आधार पर, मैं व्यक्तिगत रूप से एक अलग शैली की वकालत करता हूं।
टिम होल्ट

1
@TimHolt वैसे, यह सवाल स्टाइल गाइड लिखे जाने से पहले पूछा गया था, इसलिए असहमत होने वाले जवाब गलत नहीं हैं, बस पुराना है। मैं यहाँ किसी भी तरह ठोकर खाई और मेरे द्वारा दिए गए लिंक को नहीं देखा, इसलिए मुझे लगा कि कोई और यहाँ भी समाप्त हो सकता है।
डेवोन पार्सन्स

1
यह एक आधिकारिक "मानक" नहीं है। रूबीओप द्वारा उपयोग की गई रूबी शैली गाइड और ऊपर के दावे के साथ वहां देवॉन पार्सन्स द्वारा लिंक की गई है, जो एक गैर-कोर रूबी हैकर द्वारा बनाई गई है। इसलिए डेवोन की टिप्पणी तथ्यात्मक रूप से गलत है। बेशक आप अभी भी इसका उपयोग कर सकते हैं लेकिन यह एक मानक नहीं है।
शेवी

1

यह किस शैली की बात है जो आप सबसे अधिक भाग के लिए पसंद करते हैं। यदि आप किसी विधि के बीच में कहीं से वापस लौटना चाहते हैं तो आपको कीवर्ड रिटर्न का उपयोग करना होगा।


0

जैसे बेन ने कहा। यह तथ्य कि 'रूबी विधि का रिटर्न मान फ़ंक्शन बॉडी में अंतिम स्टेटमेंट का रिटर्न वैल्यू है' के कारण रिटर्न कीवर्ड का उपयोग अधिकांश रूबी विधियों में शायद ही कभी किया जाता है।

def some_func_which_returns_a_list( x, y, z)
  return nil if failed_some_early_check


  # function code 

  @list     # returns the list
end

4
यदि आपका इरादा अभी भी स्पष्ट है, तो आप "रिटर्न एनआईएल अगर विफल हो गए तो_सो_ल्ली_चेक" भी लिख सकते हैं
माइक वुडहाउस

@ जीशू I वास्तव में if स्टेटमेंट के बारे में शिकायत कर रहा था, विधि नाम से नहीं।
एंड्रयू ग्रिम

@ और .. ओह याद आ रहा अंत :)। समझ गया। माइक से अन्य टिप्पणी को भी शांत करने के लिए तय किया गया।
गिशु

क्यों नहीं if failed_check then nil else @list end? यह वास्तव में कार्यात्मक है
cdunn2001

@ cdunn2001 इस बात पर स्पष्ट नहीं है कि अगर और फिर कार्यात्मक है .. तो इस शैली का कारण यह है कि यह शुरुआती निकास के माध्यम से घोंसले के शिकार को कम करता है। IMHO भी अधिक पठनीय है।
गिशु
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.