पैदावार कीवर्ड का उपयोग रिटर्न और ब्रेक के साथ संयोजन में किया जाता है, और अपने आप से नहीं?


11

C # में आप वापसी प्रकार IEnumerable<T>और उपयोग के साथ तरीकों का निर्माण कर सकते हैं yield returnऔर yield breakप्रवाह को नियंत्रित कर सकते हैं। यहाँ एक सरल उदाहरण है जो दोनों नियंत्रणों का उपयोग करता है:

public IEnumerable<int> GetEvens(int start, int end) {
    if(end < start)
        yield break;

    if(start & 2 != 0)
        start++;

    for(int i = start; i <= end; i+=2) {
        yield return i;
    }        
}

मेरा सवाल है, यह मूल रूप से दो खोजशब्दों का उपयोग करने के लिए क्यों बनाया गया था yieldऔर इसका उपयोग निम्न की तरह नहीं किया गया था, जैसे कि yield"रिटर्न वैल्यू का पैमाना":

public IEnumerable<int> GetEvens(int start, int end) {
    if(end < start)
        return; // stop completely and return nothing

    if(start & 2 != 0)
        start++;

    for(int i = start; i <= end; i+=2) {
        yield i; // yield the current value.
    }        
}

मेरे लिए, यह पढ़ना और समझना सरल है।

जवाबों:


13

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

के रूप में yield break, कोई विचार नहीं है। यह वास्तव में इसके पीछे कोई अच्छा कारण नहीं लगता है जो मुझे मिल सकता है।


तब yield x;भी सिंटैक्स त्रुटि नहीं होगी?
मूप

1
@ नम: इसे बनाने से yield return, आपको यह सोचने की जहमत नहीं उठानी पड़ेगी कि यह वाक्य रचना त्रुटि थी या नहीं। टकराव की संभावना शून्य हो जाती है।
रॉबर्ट हार्वे

2
"यील्ड ब्रेक" के लिए, यह अनिवार्य रूप से "वापसी" की तरह है एक शून्य विधि में, लेकिन "वापसी" का उपयोग करते हुए "यील्ड रिटर्न" के साथ संयोजन में; भ्रामक हो सकता है। तो "यील्ड ब्रेक" का चुनाव "यील्ड रिटर्न" चुनने का एक परिणाम है।
सियानफिश

3
@ यदि आप का नाम टाइप किया गया है yieldतो yield x;एक सिंटैक्स त्रुटि नहीं होगी, लेकिन एक मान्य चर घोषणा।
बोजन Resnik

1
@moop: यह भी देखें कि ericlippert.com/2009/05/11/reserved-and-contextual-keywords और blogs.msdn.com/b/ericlippert/archive/2010/09/27/… यदि बिना नए कीवर्ड शुरू करने का विषय किसी भी कोड के हितों को तोड़ना।
एरिक लिपर्ट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.