آموزش متغیرهای ضمنی تایپ شده ( کلید واژه var)
از نسخه ی سوم سی شارپ به بعد؛ شما می توانید از کلید واژه var استفاده کنید که به جای آن که صریحاً نوع متغیر را بیان بکند؛ سمت چپ تعریف متغیر قرار داده می شود. این امر فقط درون متد امکان پذیر است و نه در سطح کلاس؛ زیرا شما در سطح کلاس باید همیشه نوع داده را مشخص کنید.
بیاید با ذکر یک مثال ببینیم که کلیدواژه var به چه صورت به کار گرفته می شود:
int age = 42; // Explicitly typed variable
var name = “John Doe”; // Implicitly typed variable
دو متغیرداریم: یکی از آنها نوع int می باشد؛ در حالی که دیگری به جای این که به عنوان یک رشته تعریف شود؛ با کلیدواژه var بیان شده است. توجه کنید که یک مقدار را در هر دو مورد به متغیرها اختصاص داده ایم؛ زیرا درحالی که اختصاص دادن یک مقدار هنگام تعریف یک نوع داده الزامی نیست؛ اما هنگام استفاده از کلید واژه Var این امر الزامی می باشد. دلیل این امر آن است که کامپایلر سی شارپ؛ نوع داده را از قسمت سمت راست عبارت تشخیص می دهد – به سادگی آنچه را که می خواهید در هنگام کامپایل به متغیر اختصاص دهید، مورد توجه قرار می دهد و سپس کلمه کلیدی var را در نوع مناسب تغییر می دهد.
این همچنین بدان معنی است که هنگام استفاده از کلیدواژه var هیچ overhead در برنامه وجود ندارد – اجرای این نوع داده با کلید واژه var به همان اندازه متغیری که به صورت صریح اعلام شده است؛ سریع می باشد، زیرا این اساساً همان لحظه انجام می شود که چارچوب دات نت کد شما را اجرا می کند.
مثال اول ما بسیار بدیهی است – در کل؛ هنگام نوشتن “var” به جای “string-رشته” وقت زیادی صرفه جویی نشده است. با این وجود ، بعضی اوقات باید انواع بسیار پیچیده تری را یا به عنوان یک متغیر جدید یا به صورت نتیجه محلی از یک عملکرد (تعریف شده توسط کاربر یا چارچوب) بیان کنید. در مثالی مانند زیر؛ می توانید با کمتر تایپ کردن، زمان نسبتاً خوبی را صرفه جویی کنید.
Dictionary<int, List<string>> dict1 = new Dictionary<int, List<string>>();
var dict2 = new Dictionary<int, List<string>>();
نتیجه دقیقاً مشابه خواهد بود؛ اما شما به طور قطع؛ در خط دوم و مثال دوم زمان بیشتری را در تایپ کردن صرفه جویی می کنید؛ و از آنجایی که شما نوع داده را در هر دو مورد در سمت راست مشخص می کنید؛ هنگام استفاده از کلید واژه var در مثالی مانند این؛ تأثیری روی خوانا بودن کد شما ندارد.
شما می توانید کلیدواژه var را هنگام بیان یک متغیر محلی به عنوان نتیجه فراخوانی یک متد؛ بیان کنید.
var s = DateTime.Now.ToString();
دوباره ذکر می کنیم که نوشتن به این شکل سریعتر است و همچنان واضح است که چه اتفاقی قرار است بیفتد و نیز این که کدام نوع متغیر را می تواند بپذیرد (یک رشته). که البته ممکن است در مورد مواردی مانند زیر اتفاق نیفتد:
var myVar = SomeMethodWithANameWhichDoesntIndicateTheReturnType();
در یک موقعیتی مشابه این؛ اصلاً مشخص نیست که چه متغیری را در بر می گیرد و شما ممکن است با استفاده از این روش؛ خوانا بودن کد خودتان را از دست بدهید. در واقع ممکن است بخواهید از یک متغیر استفاده کنید که صریح نوشته شود.
کلید واژه var و انواع داده های بی نام
تا کنون مثال هایی از کلید واژه var آوردیم که اغلب از بخش “syntactical sugar” آورده شده است – آنها برای تایپ کردن؛ کوتاه تر و مناسب تر هستند؛ اما در واقع الزامی نیستند. با این حال؛ زمانی که با انواع بی نام کار می کنید (در مورد آنها در ادامه شرح می دهیم) کاملاً معنا دار است که بخواهید اشیاء خودتان را با کلید واژه var استفاده کنید:
var myObj = new
{
Name = “John Doe”,
Age = 42
};
Console.WriteLine(myObj.Name);
در این مورد؛ همان طور که در این مثال نشان داده شده است؛ شما درواقع برای دسترسی های بعدی به فیلد انواع داده های بی نام؛ به کلیدواژه var نیاز خواهید داشت.
خلاصه
کلید واژه var به شما اجازه می دهد که یک متغیر محلی را (درون یک متد یا حلقه) بدون آن که نوع داده را صریحاً اعلام کنید؛ بیان نمایید؛ و کامپایلر سی شارپ نیز نوع داده را از سمت راست عبارت بیان شده استنتاج می کند. این کلید واژه می تواند در واقع؛ در بسیاری از موقعیت ها کار شما را ساده تر کند؛ اما کمی از خوانا بودن کدهای تان می کاهد. شما می توانید از این کلیدواژه استفاده کنید یا این که به همان بیان صریح انواع داده ها پایبند باشید؛ این به ترجیح شما بستگی دارد. اما همان طور که توضیح دادیم؛ برای انواع داده های بی نام به این کلیدواژه احتیاج خواهید داشت.