آموزش انواع داده های تهی پذیر (Nullable) در سی شارپ
Null در واقع به معنای پوچ و تهی می باشد – متغیری است که مقدار ندارد. در این قسمت از آموزش مان؛ ممکن است با داده هایی روبه رو شده باشید که مقداردهی اولیه نشدند. شما همچنین می دانید که باید همیشه قبل از دسترسی به یک متغیر؛ باید از این موضوع اطمینان حاصل کنید که آن متغیر، مقداری دارد. در غیر این صورت؛ احتمالاً با یک NullReferenceException مواجه خواهید شد.
این داده های Null مشخصاً زمانی که با اشیاء و رشته های خودتان کار می کنید؛ حائز اهمیت می باشد. از سوی دیگر؛ زمانی که با اعدادی مانند اعداد صحیح کار می کنید؛ خواهید دید که این داده ها همیشه یک مقدار (پیش فرض) دارند. برای یک عدد صحیح مقدار ذخیره/ پیشفرض ۰ (صفر) می باشد؛ که هرگز نباید با NULL اشتباه گرفته شود – آنها اصلاً شبیه هم نیستند؛ حتی اگر برخی از زبان های برنامه نویسی تایپ شده غیر استاتیک با آنها یکسان رفتار کنند- زیرا ۰ یک عدد است و Null چیزی نیست.
بنابراین؛ بنابراین اگر در شرایطی قرار گرفته اید که می خواهید یک عددی را تعریف کنید که نشان دهنده ی یک مقدار NULL / تعریف نشده باشد؛ ممکن است ندانید که باید چه کار کنید؛ زیرا شما نمی توانید مقدار null را به یک متغیر عدد صحیح تخصیص دهید. مگر این که عدد صحیح به صورت تهی پذیر (nullable) تعریف شده باشد – یک ساختار ویژه زبان برنامه نویسی که برای موقعیت هایی مشابه این ساخته شده است. در اینجا مثالی برای توضیح این تفاوت آورده شده است:
int notNullable = null; // Will cause an error from the compiler
int? nullable = null; // Just fine – it’s nullable!
این نوع کد نویسی برای به اصطلاح انواع مقادیر مانند اعداد صحیح، اعداد ممیزی شناور، متغیرهای بولین و ساختارها مجاز است. رشته ها و اشیاء از سوی دیگر انواع مرجع هستند و نمی توان آنها را به صورت تهی پذیر تعریف کرد؛ زیرا آنها به صورت پیش فرض خود nullable هستند.
بررسی یک تهی پذیری برای null
بنابراین؛ اکنون که شما یک متغیری تعریف کرده اید که می تواند null باشد؛ بررسی اینکه آیا این مورد کاملاً تهی می باشد یا خیر، مهم است. شما می توانید این کار را از دو طریق انجام دهید: کافی است متغیر را با انواع دیگر کلید واژه هایnull مقایسه کنید، یا از ویژگی HasValue استفاده کنید که یک شیء null از سیستم System.Nullable به ارث می برد. به مثال زیر توجه کنید:
int? nullable = null;
if (nullable == null)
Console.WriteLine(“It’s a null!”);
if (!nullable.HasValue)
Console.WriteLine(“It’s a null!”);
پایگاه داده SQL Server رو قورت بده! بدون کلاس، سرعت 2 برابر، ماندگاری 3 برابر، پولسازی بلافاصله ... دانلود:
نتیجه مشابه است؛ بنابراین هرکدام از این متدها که برای تان ساده تر و قابل درک تر است را مورد استفاده قرار دهید. از آنجایی که مقدار ما اکنون می تواند تهی باشد؛ شما باید همیشه قبل از استفاده از آن؛ این مورد را بررسی کنید؛ در غیر این صورت ممکن است با خطا در برنامه نویسی مواجه شوید.
استفاده از مقدار یک nullable
یک شیء تهی پذیر از System.Nullable ، ویژگی Value را نیز به ارث می برد. این امر می تواند برای باز به دست آوردن مقدار حقیقی شیء تهی پذیر استفاده شود. با این حال، برای عملیاتی که یک مقایسه ساده را انجام دهد؛ برای مثال استفاده از اپراتورهای == و !=؛ سی شارپ به شما اجازه می دهد ویژگی Value را حذف کنید و مستقیماً شیء تهی پذیر را مقایسه نمایید. به عبارت دیگر؛ هردو این مثال ها؛ همان کار را انجام می دهد:
int? nullable = 42;
if (nullable.Value == 42)
Console.WriteLine(“It’s 42!”);if (nullable == 42)
Console.WriteLine(“It’s 42!”);
اشیاء Nullable همیشه از انواع داده های پایه مانند اعداد صحیح می آید؛ همان طور که در مثال قبلی آمد. در حالی که این نوع داده ها ممکن است یک مقدار پیش فرض داشته باشد؛ مقدار پیشفرض تهی پذیر؛ همیشه تهی است. به این دلیل است که همان طور که پیشتر گفتیم؛ شما باید قبل از این که سعی کنید که از یک مقدار استفاده کنید؛ مرجع تهی بودن آن را بررسی کنید. با این حال، یک نوع nullable ؛ متد کمک کننده بسیار جالبی را به ارث می برد که شما می توانید استفاده کنید: ()GetValueOrDefault. این متد؛ مقدار شیء nullable را باز می گرداند؛ مگر این که مقدار آن تهی باشد؛ در این حالت مقدار پیش فرض نوع واقعی را برمی گرداند. بنابراین، برای یک عدد صحیح Nullable، ۰ را برمی گرداند ، برای یک متغیر بولین nullable، عبارت false باز می گردد و غیره. این به شما امکان می دهد تا هم چک کردن و هم بازیابی مقدار را طی بیان یک عبارت واحد انجام دهید:
if ((nullable.HasValue) && (nullable.Value == 42))
Console.WriteLine(“It’s 42!”);if(nullable.GetValueOrDefault() == 42)
Console.WriteLine(“It’s 42!”);
همان طور که مشاهده می کنید؛ مثال دوم در مورد بالا؛ کوتاه تر و خواندن آن ساده تر است؛ در حالی که هر دو مثال یک کار مشابه را انجام می دهند.
خلاصه
انواع مقادیر در سی شارپ، مانند اعداد صحیح و متغیرهای بولین؛ همه یک مقدار پیشفرض دارند. اگر می خواهید با این داده ها کار کنید ، به عنوان مثال از آنجا که باید بین ۰ و null تفاوت قائل شوید، یا به این دلیل که باید بدانید کاربر خودش فعالانه “false” را برای چیزی انتخاب کرده است یا این که متغیر فقط مقدار پیش فرض false را در خود نگه داشته است، می توانید متغیر را با اضافه کردن یک ? (علامت سؤال) به عنوان پسوند؛ به صورت تهی پذیر درآورید.