কেন ফলন কীওয়ার্ডটি রিটার্ন এবং ব্রেকের সাথে একত্রে ব্যবহৃত হয়, এবং নিজেই নয়?


11

সি # তে আপনি রিটার্ন টাইপ 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আর্থিক কোডের সাথে কাজ করছেন এমন নামকরণের একটি ভেরিয়েবল রাখার জন্য ।) যেহেতু "ফলন ফেরত" তখন সিনট্যাক্স ত্রুটি হত, নতুন সিনট্যাক্সটি কোনও বিদ্যমান কোড ভঙ্গ করবে না break

হিসাবে হিসাবে yield break, কোন ধারণা। সত্যই এটির পিছনে কোনও ভাল কারণ আছে যা আমি খুঁজে পেতে পারি না বলে মনে হয়।


তখন কি yield x;সিনট্যাক্স ত্রুটি ছিল না?
মুও

1
@ মুপ: এটি তৈরি করে yield return, এটি এমনকি একটি সিনট্যাক্স ত্রুটি ছিল কিনা তা নিয়ে আপনাকে ভাবারও দরকার নেই। সংঘর্ষের সুযোগ শূন্য হয়ে যায়।
রবার্ট হার্ভে

2
"ফলন বিরতি;" এর জন্য এটি মূলত "রিটার্ন"; শূন্য পদ্ধতিতে, তবে "রিটার্ন" ব্যবহার করে; "ফলন ফেরত" এর সাথে একত্রে বিভ্রান্তিকর হতে পারে। সুতরাং "ফলন বিরতি" বাছাই করা "ফলন ফেরত" চয়ন করার ফলাফল।
সায়ানফিশ

3
@ মূপ যদি আপনার নামের কোনও প্রকার থাকে yieldতবে yield x;একটি সিনট্যাক্স ত্রুটি হবে না, তবে বৈধ পরিবর্তনশীল ঘোষণা।
বোজন রেজনিক

1
@ মূপ: এরিক্লিপার্ট.com/2009/ 05 / 11/ reided- and- contextual- key वर्ड এবং ব্লগস.এমএসডিএন / বি / অ্যাপ্লিক্লিপার্ট / আর্কাইভ / 2010/ 09/27/… দেখুন যদি নতুন কীওয়ার্ড প্রবর্তন করার বিষয় না হয় কোনও কোড ভাঙা আপনার আগ্রহী।
এরিক লিপার্ট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.