2013-03-22 5 views
5

रूप में नामित किया जा सकता है।एक स्थानीय चर सी # में मान्य कोड बस</p> <pre><code>foreach (int yield in items) { yield return yield * 2; } </code></pre> <p>या</p> <pre><code>int yield = 10; </code></pre> <p>पता चला उपज

मैं समझ सकता हूं कि कंपाइलर एक परिवर्तनीय उपज और एक इटरेटर उपज के बीच अंतर करने के लिए आसान हो सकता है, लेकिन फिर भी यह भ्रम में जोड़ता है और कोड की पठनीयता को कम करता है।

क्या हम जानते हैं कि इसकी अनुमति क्यों है?

+0

मेरा मानना ​​है कि चीजें चारों ओर एक और तरीके हैं। सबसे पहले, परिवर्तनीय नामकरण पर नियम स्थापित किए गए हैं, तो कुछ कीवर्ड उपयोग से प्रतिबंधित हैं। तो, कुछ अनुमति देने का कोई कारण नहीं होना चाहिए। क्या आप एक उपनाम नाम के रूप में 'उपज' को अस्वीकार करने का कोई अच्छा कारण जानते हैं? –

उत्तर

18

क्या हम जानते हैं कि इसकी अनुमति क्यों है?

हां। yield केवल प्रासंगिक कीवर्ड है। इसे सी # 2 में पेश किया गया था, और टीम कोड को तोड़ना नहीं चाहती थी जो पहले से ही yield पहचानकर्ता के रूप में उपयोग करती थी।

यह अन्य प्रासंगिक खोजशब्दों के लिए भी सच है जो 1.partial जैसे शुरू किए गए हैं। पूरी सूची के लिए Eric Lippert's blog post देखें।

लेकिन फिर भी यह भ्रम को कहते हैं और कोड

तो फिर ऐसा नहीं है की पठनीयता को कम? आपके कोड को वास्तव में पढ़ने के लिए वास्तव में कठिन बनाने के लिए आप कई चीजें कर सकते हैं। आप अपने सभी परिवर्तनीय नामों को केवल अंडरस्कोर बना सकते हैं:

private int _; 
private string __; 
// etc 

क्या आप ऐसा करते हैं? यदि नहीं, तो आप लोगों को yield विशेष रूप से भ्रमित कोड लिखने की अपेक्षा क्यों करेंगे?

+0

@DanielHilgarth: पहले से ही जोड़ रहा था - लेकिन शामिल हो गया! –

+0

किसी भी पिछड़े संगतता को संरक्षित करने के लिए, क्या हम सी # में कीवर्ड की सूची को बंद कर देंगे? – NileshChauhan

+0

बिलकुल नहीं। अस्पष्टता से बचने के लिए कुछ खोजशब्दों को गैर-प्रासंगिक बनाया जाना चाहिए। –

2

yield एक प्रासंगिक कीवर्ड है। यह एक सामान्य कीवर्ड हो सकता है, लेकिन उन्होंने इसे एक प्रासंगिक कीवर्ड बनाना चुना।

प्रासंगिक कीवर्ड का मुख्य कारण पिछड़ा संगतता है। यदि उन्होंने भाषा में एक सामान्य कीवर्ड जोड़ा है, तो यह उस भाषा को तोड़ सकता है जिसे भाषा के पुराने संस्करणों से कॉपी किया जा रहा है।

bool yield = false; 
// bla bla 

यह कार्य नहीं करेगा बहुत अच्छी तरह से होगा यह,:

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

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