اندکی در مورد Tuple و Yield
هر چند وقت یکبار لازم است نگاهی به کدهای نوشته شده خودمان بییندازیم و با تازه های آن زبان مقایسه کنیم ، آیا پروژه فعلی مان نسبت به پروژه قبلی پیشرفت هایی داشته است ؟آیا توانسته ایم از تازه های سی شارپ در کدهایمان استفاده کنیم ؟ بد نیست هر چند وقت یکبار جهت یادآوری و پیشرفت کدها ، نگاهی داشته باشیم به تازه های سی شارپ و از آنها جهت بهبود کدنویسی مان استفاده کنیم .
در این پست قصد داریم در مورد دو مورد صحبت کنیم که کمتر در کد ها دیده می شود .
Tuples :
شاید اگر از شما بپرسند برای اینکه یک متد چند خروجی را به ما بدهد چه راهکاری وجود دارد ، بلافاصله به پارامتر های out فکر کنیم و شاید به تعریف یک کلاس poco و …
Tuple ها از نسخه 4.0 دات نت اضافه شده اند و به ما این امکان را می دهند که بتوان چندین مقدار به به عنوان خرجی برگشت داد .
1 2 3 4 5 6 7 8 9 |
public Tuple<int, string, string> GetStudent() { int studentId = 1001; string firstName = "Osman"; string lastName = "Raimi"; return Tuple.Create(studentId, firstName, lastName); } |
در سی شارپ 7 Tuple شاهد ها بهبود هایی بوده است جهت اطلاعات بیتشر در این مورد می توانید به اینجا مراجعه نمایید .
Yield:
فرض کنید متدی داریم که نیاز است لیستی را از یک منبع واکشی کرده و بازگشت دهد ، برای انجام این کار نیاز خواهیم داشت ابتدا یک متغیر موقت ساخته و داده های مورد نظر را در آن ذخیره کنیم و سپس آن را به عنوان خروجی اصلی متد برگشت دهیم
1 2 3 4 5 6 7 8 9 10 11 |
public List<int> GetValuesGreaterThan100(List<int> masterCollection) { List<int> tempResult = new List<int>(); foreach (var value in masterCollection) { if (value > 100) tempResult.Add(value); } return tempResult; } |
برای جلوگیری کردن از تعریف یک متغیر موقت می توان از yield کمک گرفت ، در این حالت دیگر نیازی به متغیر موقت و نگهداری لیست آیتم ها نداریم . کد فوق با استفاده از yield را می توان به صورت زیر داشت :
1 2 3 4 5 6 7 8 |
public IEnumerable<int> GetValuesGreaterThan100(List<int> masterCollection) { foreach (var value in masterCollection) { if (value > 100) yield return value; } } |
استفاده از yield و Tuble ها باعث خوانا تر شدن کد می شوند
دیدگاهتان را بنویسید
برای نوشتن دیدگاه باید وارد بشوید.