2012-10-17 14 views
13

ग्रूवी में, return statement is optional, आप की तरह के तरीकों लिखने के लिए अनुमति देता है:ग्रूवी के "वैकल्पिक वापसी" अर्थ विज्ञान

def add(a, b) { 
    a + b 
} 

... जो a और b कहते हैं और फोन करने वाले के लिए परिणाम देता है।

हालांकि, मैं सोच रहा हूं कि विधि में कितने रिटर्न "कथन" होते हैं। उदाहरण के लिए, जावा में आप हो सकता है:

String append(String a, String b) { 
    if (a == null) { 
     return b; 
    } 
    return a + b; 
} 

इस (काल्पनिक रूप से) की तरह ग्रूवी में अनुवाद किया जा सकता है:

def append(a, b) { 
    if (! a) { 
     b 
    } 
    a + b 
} 

हालांकि, इस मामले में, कैसे ग्रूवी पता है कि bif के अंदर बयान वापस किया जाना चाहिए? या यह नहीं करता है? मुझे लगता है कि ग्रोवी किसी भी कथन का इलाज नहीं कर सकता जिसका परिणाम return के रूप में उपयोग नहीं किया गया है, सही? इस मामले में "वैकल्पिक वापसी" सुविधा कैसे व्यवहार करती है, इसके लिए कोई स्पष्ट रूप से परिभाषित अर्थशास्त्र है?

+0

बस एक सिर ऊपर, आपके द्वारा संदर्भित लिंक टूटा हुआ है। – jmreicha

+0

@jmreicha - धन्यवाद, तय। – aroth

उत्तर

25

पेज आप लिंक किए गए (बल्कि ने संक्षेप में) का वर्णन सटीक अर्थ विज्ञान:

सूचना है कि वापसी कथन तरीकों के अंत में वैकल्पिक है।

तो b उस if ब्लॉक में तब तक वापस नहीं किया जाएगा जब तक आप इसे स्पष्ट रूप से वापस नहीं कर देते। व्यवहार में इसका मतलब है कि वापसी मान पिछले बयान का मूल्यांकन का परिणाम हो जाएगा, इसलिए यदि आपके उदाहरण थे

def append(a, b) { 
    if (!a) { b } 
    else { a + b } 
} 

फिर परिणाम b हो सकता है अगर !atrue और a + b अन्यथा है।

एक void फ़ंक्शन की कॉल का परिणाम है, null है इसलिए यदि उदाहरण

def append(a,b) { 
    if (!a) { b } 
    else { a + b } 
    println "debug: $a $b" 
} 

थे तब append हमेशा null लौट आते हैं।

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

+2

समझ में आता है। हालांकि अगर मैंने 'else {a + b}' किया था तो क्या होगा? उस स्थिति में, 'बी' विधि के "अंत" पर होगा, क्योंकि इसके बाद कोई निष्पादन योग्य बयान नहीं होगा। – aroth

+0

मैंने अभ्यास में वैकल्पिक वापसी अर्थशास्त्र का अर्थ क्या है, इस पर विस्तृत करने के लिए कुछ अतिरिक्त उदाहरण जोड़े। –

+0

इससे पहले कि मैंने इसे क्रेडिट दिया था, इससे अधिक सूक्ष्म प्रश्न बन गया। कुडोस। –

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