Discard در زبان سی شارپ مفاهیم و کاربرد آن
بدون دیدگاه
در حال حاضر خالی است: ۰ ﷼
در بسیاری از مواقع، برای انجام کاری خاص و یا رسیدن به نتیجه ای مشخص از توابع استفاده می کنیم. گاهی اوقات این توابع دارای پارامتر های خروجی هستند. گاه ممکن است یک بسته حاوی چند مقدار (Tuple) برگردانند. (برای آشنایی با Tuple ها مطلب : Tuple ها و کاربرد های آن در سی شارپ را مطالعه نمایید). برخی مواقع تمام پارامترهای خروجی یا همه مقادیر موجود در Tuple برگردانده شده برای ما اهمیت ندارد. اما برای ذخیره این مقادیر و فراخوانی توابعی با پارامترهای خروجی، نیاز به تعریف متغییرهای متناظر وجود دارد. به همین دلیل مجبور هستیم متغییر هایی بی استفاده تعریف کنیم. در این حال هدف از تعریف آنها صرفا امکان فراخوانی تابع خواهد بود.
Discard در زبان سی شارپ در مواردی از این دست، می تواند مورد استفاده قرار گیرد. در این صورت نگران تعریف متغییرهای بلااستفاده و موقتی نخواهید بود. استفاده از Discard علاوه بر این حالت، حین Deconstruct کردن اشیاء کاربرد دارد. شیء مورد نظر باید قابلیت Deconstruct شدن را داشته باشد. در این صورت Discard در زبان سی شارپ می تواند بسیار کارآمد باشد. برای استفاده از Discard کافی است از _ (Underscore) استفاده نماییم. در واقع Discard در زبان سی شارپ متغیری موقتی و بی مفهوم است. Discard نه تنها مقداری در خود ذخیره نمی کند، بلکه فضایی در حافظه نیز اشغال نخواهد کرد.
ضمنا توجه داشته باشید، اگر از _ به درستی به عنوان Discard استفاده شود، در صورت تخصیص مقدار یا بازیابی مقدار، Compile Error دریافت خواهید کرد.
مثال زیر کاربرد Discard را حین دریافت خروجی یک تابع (که نوع خروجی از جنس Tuple بر می گرداند) نمایش می دهد.
var (_, _, _, prop1, _, porp2) = QueryCityDataForYears( “New York City”, ۱۹۶۰, ۲۰۱۰);
Console.WriteLine($”Population change, 1960 to 2010: { porp2 – porp1 :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 فقط مقادیر مرتبط به نام و شهر در متغییر های مربوطه ذخیره شده اند.