ایجاد سری های فیبوناچی در C#7

شنبه 16 اردیبهشت 1396

همه ما با فرمول فیبوناچی آشنا هستیم ، مجموعه ای که هرعدد حاصل جمع دو عدد قبلی خود بود. اگر بخواهید این مجموعه را در #C کد نویسی کنید چطور آن را می نویسید؟ در C#7 روش جدیدی برای نوشتن این مجموعه مطرح شده است که کدنویسی ما را تمیزتر و سریعتر خواهد کرد.

ایجاد سری های  فیبوناچی در C#7

چند تایی ها (tuple ها) در C#7

مقادیر بازگشتی متعدد برای یک تابع یکی از آخرین ویژگی هایی است که با C#7 آمده است. قبلا مانند سوزنی در انبار کاه در بین چندتایی های موجود در دسترس بود اما می توان جزئیات بیشتری برای نوشتن مقاله ی موجود پیدا کرد و به آن پرداخت.

قبل از استفاده از این ویژگی تازه ، لطفا مطمئن شوید که پکیج ناگت ValueTuple (nuget) را نصب کرده اید.

ساخت تولید کننده مجموعه های فیبوناچی

همه ما می دانیم که مجموعه های فیبوناچی بر اساس فرمول زیر ساخته می شوند.

F(1) = 0  
F(2) = 1  
F(n) = F(n-2) + F(n-1)  

حالا بیایید تولید کننده فیبوناچی در C# را بنویسیم.

static IEnumerable<int> Fibonacci()    
 {    
     int first = 0;    
     int second = 1;    
    
     yield return first;    
     yield return second;    
    
     while (true)    
     {    
         int aux = first;    
         first = second;    
         second = second + aux;    
         yield return second;    
     }    
 }   

اگر بخواهیم کد را تحلیل کنیم می ببینیم که در خط 11 ما مجبوریم مقدار داده اولیه را قبل از جمع کردن در یک متغیر دیگر جایگزین کنیم.خوب اگر ما نخواهیم از یک متغیر اضافه استفاده کنیم خوشبختانه می توانیم با استفاده از چند تایی های جدید از شر آن رها شویم.

اگر بخواهیم کد بالا را با استفاده از روش چندتایی جدید بازنویسی کنیم ، انتهای کد ما به شکل زیر تغییر می کند.

static IEnumerable<int> Fibonacci()  
{  
    int first = 0;  
    int second = 1;  
  
    yield return first;  
    yield return second;  
  
    while (true)  
    {  
        (first, second) = (second, second + first);  
        yield return second;  
    }  
}  

به نظر شما این کد کار می کند؟ البته که کار می کند ، بیایید نگاهی به کدهای نوشته شده بیندازیم تا ببینیم چه اتفاقی پشت پرده افتاده است؟

ValueTuple<int, int> expr_22 = new ValueTuple<int, int>(second, second + first);  
num2 = expr_22.Item1;  
num = expr_22.Item2;  
first = num2;  
second = num;  

می بینیم که مقادیر ما به یک مقدار چندتایی موقت تخصیص داده شده اند. در این راه ما مطمئن هستیم که مقادیر قبل از انجام عملیات تغییر نمی کنند. این ترفند جالب به ما اجازه می دهد که یک تابع Swap در یک خط کد بر اساس همان قاعده بنویسیم که به صورت زیر است.

static void Swap(ref int x, ref int y)  
{  
    (x, y) = (y, x);  
}  

نتیجه گیری

روش جدید انواع مقادیر، ویژگی خیلی مفیدی است که جهت تمیزنگه داشتن کدها به ما کمک می کند حتی اگراستفاده مجدد نداشته باشد . به هر حال  ما باید هنگام استفاده از این ویژگی  مراقب باشیم زیرا تاکید ما برای شکستن کدهای برنامه نویسی باید اصولی باشد.شما ممکن است بعضی وقتها بخواهید یک جواب تنها را بشکنید تا فقط یک تابع درست کنید که مجموعه ای از مقادیر را بر گرداند. در این روش کدها کمتر قابل نگهداری هستند اما اجازه دهید خیلی بدبین نباشیم.

آموزش سی شارپ

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان
  • C#.net
  • 3k بازدید
  • 0 تشکر

کاربرانی که از نویسنده این مقاله تشکر کرده اند

تاکنون هیچ کاربری از این پست تشکر نکرده است

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید