Nullable در سیشارپ چیست و چگونه استفاده میشود؟
Nullable در سیشارپ به متغیرهای نوع مقداری اجازه میدهد مقدار null بگیرند و برای دادههای اختیاری کاربرد دارد.
18 آبان 1405
لینک کوتاه
Nullable در سیشارپ چیست و چگونه استفاده میشود؟
در زبان برنامهنویسی سیشارپ (#C)، یکی از مفاهیم مهمی که هنگام کار با متغیرها با آن روبهرو میشویم، Nullable است.این مفهوم به ما اجازه میدهد متغیرهایی داشته باشیم که علاوه بر مقادیر معمول خود، بتوانند مقدار null را نیز بپذیرند.
برای درک بهتر این موضوع، فرض کنید برنامهای برای مدیریت اطلاعات دانشجویان نوشتهایم.
هر دانشجو دارای نام، سن، معدل و شماره تلفن است. ممکن است نام و سن دانشجو مشخص باشند، اما معدل او هنوز ثبت نشده باشد.
در چنین شرایطی، لازم است بتوانیم مشخص کنیم که معدل دانشجو هنوز مقداری ندارد.
در سیشارپ، متغیرهای نوع مقداری (Value Type) مانند int، double، bool و decimal بهصورت عادی نمیتوانند مقدار null دریافت کنند. برای مثال، کد زیر صحیح نیست:
int age = null;
این کد با خطای کامپایل مواجه میشود؛ زیرا متغیر age از نوع int است و باید یک عدد صحیح معتبر داشته باشد.برای حل این مشکل، سیشارپ قابلیتی به نام Nullable ارائه میدهد که امکان اختصاص مقدار null به انواع مقداری را فراهم میکند.
آیا به دنبال یک فرصت عالی برای یادگیری برنامهنویسی هستید؟ 🚀با دوره آموزشی سیشارپ ما، شما میتوانید مهارتهای خود را به سطح جدیدی ارتقا دهید! این دوره بهطور کامل طراحی شده تا به شما کمک کند تا از مبتدی تا پیشرفته در دنیای برنامهنویسی سیشارپ پیش بروید.
👨🏫 چرا دوره ما را انتخاب کنید؟
- محتوای جامع و عملی: با پروژههای واقعی و تمرینات عملی، یادگیری را به تجربهای جذاب تبدیل کنید.
- مدرس مجرب: از تجربه و دانش مدرس حرفهای بهرهمند شوید که شما را در هر مرحله از یادگیری راهنمایی میکنند.
- پشتیبانی ۲۴/۷: هر زمان که سوالی داشتید، ما در کنار شما خواهیم بود تا به شما کمک کنیم.
- دسترسی مادامالعمر: به محتوای دوره دسترسی دائمی داشته باشید و هر زمان که خواستید، میتوانید به آن مراجعه کنید.
💡 فرصت را از دست ندهید!
بایادگیری سیشارپ، میتوانید در دنیای فناوری اطلاعات به یک متخصص تبدیل شوید و در پروژههای جذاب و چالشبرانگیز شرکت کنید.
همین امروز به جمع یادگیرندگان ما بپیوندید و اولین قدم را به سوی آیندهای روشنتر بردارید!

Nullable چیست؟
Nullable قابلیتی در سیشارپ است که اجازه میدهد یک نوع مقداری، علاوه بر مقادیر معمول خود، مقدار null را نیز بپذیرد.برای تعریف یک متغیر Nullable دو روش رایج وجود دارد.
روش اول استفاده از علامت سؤال (?) بعد از نوع متغیر است.
int? age = null;
double? salary = null;
bool? isActive = null;
در این مثالها:
- متغیر age میتواند عدد صحیح یا null باشد.
- متغیر salary میتواند عدد اعشاری یا null باشد.
- متغیر isActive میتواند مقدار true، مقدار false یا null داشته باشد.
روش دوم استفاده از ساختار عمومی <Nullable<T است:
Nullable<int> age = null;
Nullable<double> salary = null;
Nullable<bool> isActive = null;
این روش از نظر عملکرد معادل روش اول است. به همین دلیل، معمولاً برنامهنویسان برای خوانایی بیشتر از علامت ? استفاده میکنند.
تفاوت نوع معمولی با نوع Nullable در سی شارپ
برای درک بهتر، متغیرهای معمولی و Nullable را با هم مقایسه میکنیم.int number = 10;
int? nullableNumber = null;
number = 20;
nullableNumber = 30;
nullableNumber = null;
در این مثال، متغیر number فقط میتواند یک عدد صحیح داشته باشد؛ اما متغیر nullableNumber علاوه بر عدد صحیح، میتواند null نیز باشد.
چگونه مقدار Nullable را بررسی کنیم؟
هنگام استفاده از متغیر Nullable، ممکن است بخواهیم بدانیم که آیا متغیر واقعاً مقداری دارد یا خیر.برای این کار چند روش وجود دارد.
روش اول: استفاده از HasValue
ویژگی HasValue مشخص میکند که متغیر Nullable دارای مقدار است یا خیر.int? age = 25;
if (age.HasValue)
{
Console.WriteLine("سن مشخص شده است.");
}
else
{
Console.WriteLine("سن مشخص نیست.");
}
خروجی این برنامه چنین خواهد بود:سن مشخص شده است.
اگر مقدار age برابر null باشد، ویژگی HasValue مقدار false را برمیگرداند.
روش دوم: استفاده از Value
ویژگی Value برای دسترسی به مقدار واقعی متغیر Nullable استفاده میشود.int? age = 25;
Console.WriteLine(age.Value);
خروجی:
25
اما باید توجه داشت که اگر متغیر Nullable مقدار null داشته باشد، دسترسی به ویژگی Value باعث ایجاد استثنای InvalidOperationException میشود.
برای مثال:
int? age = null;
Console.WriteLine(age.Value);
این کد هنگام اجرا با خطا مواجه خواهد شد.
به همین دلیل، بهتر است پیش از استفاده از Value، وجود مقدار را بررسی کنیم یا از روشهای امنتری مانند ?? استفاده کنیم.
روش سوم: مقایسه با null
یک روش ساده و خوانا، مقایسه مستقیم متغیر با null است.int? score = null;
if (score == null)
{
Console.WriteLine("نمره هنوز ثبت نشده است.");
}
else
{
Console.WriteLine($"نمره: {score}");
}
این روش در بسیاری از برنامههای سیشارپ کاربرد دارد و بهراحتی میتوان از آن برای بررسی مقادیر اختیاری استفاده کرد.
عملگر Null-Coalescing یا ??
یکی از کاربردیترین ابزارها هنگام کار با Nullable، عملگر ?? است.این عملگر زمانی استفاده میشود که بخواهیم اگر مقدار یک متغیر null بود، یک مقدار جایگزین در نظر بگیریم.
مثال:
int? age = null;
int actualAge = age ?? 18;
Console.WriteLine(actualAge);
خروجی:
18
در این مثال، چون مقدار age برابر null است، عدد 18 به متغیر actualAge اختصاص داده میشود.
حال اگر مقدار age برابر 25 باشد:
int? age = 25;
int actualAge = age ?? 18;
Console.WriteLine(actualAge);
خروجی:
25
در این حالت، چون متغیر مقدار دارد، همان مقدار استفاده میشود و عدد جایگزین نادیده گرفته میشود.
این عملگر در برنامههایی که با اطلاعات اختیاری کار میکنند، بسیار مفید است.
عملگر Null-Coalescing Assignment یا ??=
عملگر ??= در نسخههای جدیدتر سیشارپ، از جمله #C 8.0، معرفی شده است.این عملگر زمانی مقدار جدیدی اختصاص میدهد که متغیر سمت چپ null باشد.
int? number = null;
number ??= 100;
Console.WriteLine(number);
خروجی:
100
در مثال بالا، چون number مقدار ندارد، عدد 100 به آن اختصاص داده میشود.
اما اگر متغیر از ابتدا مقدار داشته باشد:
int? number = 50;
number ??= 100;
Console.WriteLine(number);
خروجی همچنان 50 خواهد بود؛ زیرا عملگر ??= مقدار موجود را تغییر نمیدهد.
عملگر شرطی Null یا ?.
عملگر ?. برای دسترسی امن به اعضای یک شیء استفاده میشود، بهطوریکه اگر شیء null باشد، دسترسی به عضو آن انجام نمیشود.برای مثال:
string? name = null;
int? length = name?.Length;
Console.WriteLine(length);
خروجی:
در این مثال، چون name برابر null است، عبارت name?.Length نیز مقدار null برمیگرداند.
در نتیجه، متغیر length هم Nullable خواهد بود.
اگر نام مقدار داشته باشد:
string? name = "Ali";
int? length = name?.Length;
Console.WriteLine(length);
خروجی:
3
نکته مهم این است که string بهخودیخود یک نوع ارجاعی (Reference Type) است و میتواند null باشد.
علامت ? در string? در نسخههای جدید سیشارپ برای بیان وضعیت احتمالی null و بررسیهای مرتبط با آن استفاده میشود.
این موضوع با int? تفاوت دارد که یک نوع مقداری Nullable ایجاد میکند.
کاربرد Nullable در پروژههای واقعی
Nullable در پروژههای واقعی کاربردهای فراوانی دارد.یکی از مهمترین کاربردهای آن، ذخیره اطلاعات اختیاری در پایگاه داده است.
فرض کنید جدولی برای اطلاعات کارمندان داریم که حقوق ماهانه بعضی از کارمندان هنوز مشخص نشده است.
در چنین شرایطی، میتوان از نوع ?decimal استفاده کرد.
decimal? salary = null;
if (salary.HasValue)
{
Console.WriteLine($"حقوق کارمند: {salary.Value}");
}
else
{
Console.WriteLine("حقوق کارمند هنوز ثبت نشده است.");
}
این روش باعث میشود بین مقدار صفر و مقدار نامشخص تفاوت قائل شویم.
برای مثال، حقوق 0 ممکن است نشاندهنده یک مقدار ثبتشده باشد، اما null به این معنی است که هنوز اطلاعات حقوق در دسترس نیست.
کاربرد دیگر Nullable در دریافت اطلاعات از فرمهای کاربری است.
ممکن است کاربر فیلد سن یا تعداد فرزندان را خالی بگذارد.
استفاده از ?int این امکان را فراهم میکند که مقدار خالی را بدون تبدیل آن به عدد صفر نمایش دهیم.
همچنین در برنامههای مبتنی بر API، برخی فیلدهای پاسخ ممکن است اختیاری باشند.
استفاده درست از Nullable میتواند مدلهای داده را به واقعیت نزدیکتر کند و از بروز خطاهای ناشی از فرض وجود همیشگی اطلاعات جلوگیری کند.
نتیجهگیری
Nullable یکی از قابلیتهای مهم سیشارپ است که امکان نمایش مقادیر نامشخص یا اختیاری را فراهم میکند.این قابلیت بهویژه در برنامههایی که با پایگاه داده، فرمهای کاربری، APIها و اطلاعات ناقص سروکار دارند، اهمیت زیادی دارد.
با استفاده از ?int یا <Nullable<int میتوان به متغیرهای عددی اجازه داد که علاوه بر اعداد معتبر، مقدار null نیز داشته باشند.
ویژگیهایی مانند HasValue و Value و عملگرهایی مانند ??، ??= و ?. نیز کار با این مقادیر را آسانتر میکنند.
در نهایت، باید به یاد داشته باشیم که استفاده صحیح از Nullable تنها یک تکنیک نحوی نیست؛ بلکه روشی برای طراحی دقیقتر مدلهای داده و مدیریت بهتر وضعیتهای نامشخص در برنامه است.
هرچه بهتر بتوانیم تفاوت میان مقدار واقعی، مقدار پیشفرض و مقدار ناموجود را درک کنیم، برنامههایی قابلاعتمادتر و خواناتر خواهیم نوشت.



کاربران ما
شما هم نظرتون با ما دریاره “Nullable در سیشارپ چیست و چگونه استفاده میشود؟” اشتراک بزارید
برای ارسال نظر لطفا ورود یا ثبت نام کنید