مفهوم و کاربرد Discard در سی شارپ

Discard در زبان سی شارپ مفاهیم و کاربرد آن

بدون دیدگاه

Discard در زبان سی شارپ

در بسیاری از مواقع، برای انجام کاری خاص و یا رسیدن به نتیجه ای مشخص از توابع استفاده می کنیم. گاهی اوقات این توابع دارای پارامتر های خروجی هستند. گاه ممکن است یک بسته حاوی چند مقدار (Tuple) برگردانند. (برای آشنایی با Tuple ها مطلب : Tuple ها و کاربرد های آن در سی شارپ را مطالعه نمایید). برخی مواقع تمام پارامترهای خروجی یا همه مقادیر موجود در Tuple برگردانده شده برای ما اهمیت ندارد. اما برای ذخیره این مقادیر و فراخوانی توابعی با پارامترهای خروجی، نیاز به تعریف متغییرهای متناظر وجود دارد. به همین دلیل مجبور هستیم متغییر هایی بی استفاده تعریف کنیم. در این حال هدف از تعریف آنها صرفا امکان فراخوانی تابع خواهد بود.

Discard در زبان سی شارپ در مواردی از این دست، می تواند مورد استفاده قرار گیرد. در این صورت نگران تعریف متغییرهای بلااستفاده و موقتی نخواهید بود. استفاده از Discard علاوه بر این حالت، حین Deconstruct کردن اشیاء کاربرد دارد. شیء مورد نظر باید قابلیت Deconstruct شدن را داشته باشد. در این صورت Discard در زبان سی شارپ می تواند بسیار کارآمد باشد. برای استفاده از Discard کافی است از _ (Underscore) استفاده نماییم. در واقع Discard در زبان سی شارپ متغیری موقتی و بی مفهوم است. Discard نه تنها مقداری در خود ذخیره نمی کند، بلکه فضایی در حافظه نیز اشغال نخواهد کرد.

از مزایای Discard می توان به موارد زیر اشاره نمود:

  • کاهش فضای حافظه استفاده شده
  • از بین بردن نیاز به متغییر های موقتی
  • بالا بردن خوانایی کد
  • بالا بردن سهولت نگهداری و توسعه کد

از کاربرد های Discard می توان به موارد زیر اشاره کرد

  • فرآیند Deconstruction اشیاء و Tuple ها
  • استفاده در Pattern Matching حین استفاده از is و switch (به عنوان گزینه ی default و یا سایر حالات)
  • فراخوانی متدهایی با پارامترهای out بلا استفاده در context موجود
  • به صورت مجرا و مستقل اگر متغیری به نام _ در حوزه دید فعلی تعریف نشده باشد

ضمنا توجه داشته باشید، اگر از _ به درستی به عنوان Discard استفاده شود، در صورت تخصیص مقدار یا بازیابی مقدار، Compile Error دریافت خواهید کرد.

مثال زیر کاربرد Discard را حین دریافت خروجی یک تابع (که نوع خروجی از جنس Tuple بر می گرداند) نمایش می دهد.

var (_, _, _, prop1, _, porp2) = QueryCityDataForYears( “New York City”, ۱۹۶۰,  ۲۰۱۰);
Console.WriteLine($”Population change, 1960 to 2010: { porp2porp1 :N0 });

در این مثال چهار مورد از خروجی های تابع که از نوع Tuple است با استفاده از Discard نادیده گرفته شده اند. تنها مقدار prop1 و prop2 به دلیل اهمیتشان در ادامه دستورات، دریافت شده و بکار گرفته شده اند.

مثال زیر نیز کاربرد Discard را حین Deconstruct کردن یک شیء نشان می دهد.

var p = new Person( “John” , “Quincy” , “Adams” , “Boston”, “MA”) ;
var ( fName , _ , city  , _ ) = p ;

در مثال فوق، نمونه ای از class خاصی مانند Person ساخته شده. در ادامه با استفاده از Constructor برخی فیلد های این کلاس مقدار دهی شده اند. (برای اطلاعات بیشتر در مورد class ها می توانید class ها در سی شارپ را مطالعه نمایید). در خط دوم، یک Tuple تعریف شده. با استفاده از امکان Deconstruction شیء ساخته شده را Deconstruct شده است. در ادامه با کمک Discard فقط مقادیر مرتبط به نام و شهر در متغییر های مربوطه ذخیره شده اند.

آواتار کاربر

شهاب ساری اصلانی

از سال 1385 به صورت جدی مشغول تدریس در حوزه های برنامه نویسی دات نت و طراحی بانک های اطلاعاتی بوده ام. تدریس به عنوان یک حرفه همیشه برایم جذاب بوده و یادگیری جدیدترین مباحث لذت بخش است.

ارسال یک دیدگاه

آدرس ایمیل شما منتشر نخواهد شد.