آموزش گام به گام #C (جلسه بیست و سوم: کار با نوع‌های nullable)
1398/01/28 11:32 , میلاد صاحب نظر

آموزش گام به گام #C (جلسه بیست و سوم: کار با نوع‌های nullable)

کار با نوع‌های مقداری و داده‌ها گاهی مشکل است، چون یک نوع مقداری معمولاً دارای مقدار null نیست. در این جلسه چگونگی غلبه بر این محدودیت را با استفاده از نوع‌های nullable در #C به شما نشان می‌دهیم. با ما همراه باشید!

جلسه اول: آغاز کار با #C جلسه ششم: namespaceها جلسه یازدهم: اندیس گذار یا indexerها جلسه شانزدهم: استفاده از اتریبیوت‌ها جلسه بیست و یکم: متدهای بی‌نام یا anonymous
جلسه دوم: عملگرها، نوع‌ها و متغیرها جلسه هفتم: مقدمه‌ای بر کلاس‌های #C جلسه دوازدهم: ساختار یا structها جلسه هفدهم: enumها جلسه بیست و دوم: موضوعاتی در مورد نوع در #C
جلسه سوم: عبارات کنترلی - گزینشی جلسه هشتم: وراثت کلاس در #C جلسه سیزدهم: واسط یا interfaceها جلسه هجدهم: عملگرهای overloading جلسه بیست و سوم: کار با نوع‌های nullable
جلسه چهارم: عبارات کنترلی - حلقه‌ها جلسه نهم: چندریختی جلسه چهاردهم: مقدمه‌ای بر delegateها و رویدادها جلسه نوزدهم: کپسوله‌سازی  
جلسه پنجم: متدها جلسه دهم: ویژگی یا propertyها جلسه پانزدهم: مقدمه‌ای بر کنترل خطا یا exception جلسه بیستم: مقدمه‌ای بر generic collectionها  

در جلسه آخر این دوره موارد زیر را خواهید آموخت:

  • درک مشکلی که نوع‌های nullable برطرف می‌کنند
  • آموختن چگونگی تعریف نوع nullable
  • آموختن چگونگی استفاده از نوع‌های nullable

درک مشکلی که نوع‌های nullable‌ برطرف می‌کنند

همان‌طور که در جلسه دوازدهم توضیح داده‌ شد، مقدار پیش‌فرض یک struct (نوع مقداری) نوعی از صفر است. این یکی از تفاوت‌های دیگر بین نوع‌های رفرنسی و نوع‌های مقداری است، بقیه تفاوت‌ها در جلسه بیست و دوم توضیح داده شدند.

مقدار پیش‌فرض یک نوع رفرنسی null است. اگر با کد #C کار می‌کنید و منابع داده‌ای مخصوص به خودتان را مدیریت می‌کنید (مثل یک فایل که داده‌ها را برای برنامه شما نگهداری می‌کند)، پس مقادیر پیش‌فرض برای Structها به خوبی کار می‌کنند.

در واقعیت، اکثر برنامه‌ها با پایگاه‌های داده کار می‌کنند، که آن‌ها سیستم‌های نوع مخصوص به خودشان را دارند. پیامدهای کار با سیستم‌های نوع پایگاه‌ داده این است که هیچ نگاشت یک به یکی بین نوع‌های #C و پایگاه داده وجود ندارد. یک تفاوت واضح دیگر این است که نوع‌های پایگاه داده می‌توانند روی null تنظیم شوند.

یک پایگاه داده هیچ‌چیزی از نوع‌های رفرنسی و مقداری سر در نمی‌آورد، که خب این نوع‌ها از جمله مفاهیم زبان #C (پلتفرم NET.) هستند. این بدان معنا است که معادل‌های نوع مقداری #C در پایگاه داده (مثل int، decimal و DateTime) می‌توانند مقدار null بگیرند.

از آنجا که یک نوع در پایگاه داده می‌توانند null باشد، اما نوع مقداری #C نمی‌تواند null باشد، باید روشی پیدا کنید که به کد #C خود بفهمانید مقادیر null‌ را بپذیرد. مسلماً طرحی که استفاده می‌کنید گاهی با یک برنامه سازگار است و با یک برنامه دیگر نیست، این چیزی است که گاهی کنترل آن دست شما نیست.

برای مثال، اگر می‌خواستید یک DateTime با مقدار null از SQL Server را به عنوان مقدار حداقل DateTime در #C تبدیل کنید چه می‌کردید؟ بعد از آن پروژه، وظیفه بعدی شما خواندن داده از یک پایگاه داده legacy Foxpro است که مقدار حداقل DateTime آن با مقدار آن در SQL Server متفاوت است.

به خاطر وجود این ناسازگاری‌ها و پیچیدگی‌های بالقوه، C# 2.0 نوع‌های nullable را اضافه کرد که برای کار با داده‌های null بهترین گزینه هستند.

تعریف نوع‌های nullable

برای تعریف یک نوع مقداری به عنوان nullable، یک علامت سؤال به نام نوع اضافه کنید. نحوه تعریف یک متغیر DateTime به عنوان یک نوع nullable این‌گونه است:

یک DateTime به صورت طبیعی نمی‌تواند مقدار null بگیرد، اما تعریف بالا به startDate اجازه می‌دهد که مقدار null  و هر مقدار قانونی دیگر برای DateTime را بپذیرد. واژه پردازی مناسب این است که نوع متغیر startDate را به عنوان nullableDateTime معرفی کنیم.

با استفاده از کد زیر می‌توانید یک مقدار طبیعی را به startDate اختصاص دهید:

یا می‌توانید به این شکل به آن مقدار null اختصاص دهید:

در زیر یک مثال دیگر از تعریف و مقداردهی اولیه به یک nullable int را مشاهده می‌کنید:

متغیر unitsInStock در مثال بالا همچنین می‌تواند مقدار null نیز بپذیرد.

کار با نوع‌های nullable

وقتی با نوع‌های nullable سر و کار دارید، باید ابتدا آن‌ها را بررسی کنید تا ببینید آیا null هستند یا خیر. در زیر مثالی مشاهده می‌کنید که نشان می‌دهد چگونه می‌توانید مقدار null را بررسی کنید:

مثال بالا نشان می‌دهد که فقط باید از عملگر مساوی برای بررسی null استفاده کنید. همچنین می‌توانید این بررسی را به عنوان بخشی از یک عبارت if به کار ببرید، به این شکل:

نکته: به عملگر cast در عبارت else مثال بالا دقت کنید. بردی اختصاص مقدار از نوع‌های nullable به non – nullable به یک تبدیل صریح نیاز است.

مشاهده می‌کنید که برای انجام چنین عملیات ساده و معمول به چندین خط کد نیاز است. خوشبختانه، روش بهتری هم برای انجام همان کار وجود دارد: استفاده از عملگر تلفیق یعنی ?? که در کد زیر مشاهده می‌کنید:

عملگر تلفیق به این صورت کار می‌کند: اگر اولین مقدار (سمت چپ) null باشد، آنگاه #C دومین عبارت (سمت راست) را ارزیابی می‌کند.

خلاصه

این جلسه چگونگی استفاده مفید از نوع‌های nullable در برنامه‌های #C را نشان داد – به خصوص وقتی با مقادیری از یک پایگاه داده کار می‌کنید. آموختید که چگونه می‌توان یک نوع nullable تعریف کرد و چگونه می‌توان مقادیر را هم به نوع‌های nullable و هم non – nullable اختصاص داد.

مهارت دیگری که آموختید این بود که با بررسی اینکه آیا مقادیر نوع‌های nullable مقدار null هست یا خیر، چگونه می‌توان از آن‌ها استفاده کرد. همان‌طور که مشاهده کردید، وقتی باید یک مقدار قابل‌قبول را به یک نوع non – nullable اختصاص دهید، عملگر تلفیق برای کمک به کار با متغیرهای نوع nullable بسیار مفید خواهد بود.

منبع: C#-Station

  جلسه قبل

 مطالب مرتبط

 مقدمه ای بر زبان برنامه نویسی #C و پلتفرم NET Framework.
7 دلیل منطقی برای آموختن #C
 طبقه بندی زبان های برنامه نویسی
به دست آوردن Exceptionها در #C و یافتن همه خطاها
 LINQ(زبان جستجوی یکپارچه)
برنامه نویسی شیءگرا چیست؟

از آخرین دوره های آموزشی و تخفیف ها مطلع شوید

با تکمیل فرم زیر ، از اخبار و اطلاعات به روز برنامه نویسی و تکنولوژی عقب نمانید

آخرین مطالب

آموزش جامع SQL Server (جلسه ۱۲)
آموزش جامع SQL Server (جلسه ۱۲)

دستور UPDATE در SQL Server برای تغییر داده‌های موجود در یک جدول، از دستور UPDATE به شکل زیر استفاده ...

آموزش جامع SQL Server (جلسه ۱۵)
آموزش جامع SQL Server (جلسه ۱۵)

دستور DROP TABLE در SQL Server گاهی، لازم است یک جدول که دیگر استفاده‌ای ندارد را حذف کنید. برای ...

آموزش جامع SQL Server (جلسه ۳۵: Window Functionها – بخش ۲)
آموزش جامع SQL Server (جلسه ۳۵: Window Functionها – بخش ۲)

بخش اول از آخرین مبحث دوره جامع آموزش SQL Server در جلسه قبلی بررسی شد. این مبحث که ...

آخرین دیدگاه ها

دیدگاه خود را درباره این پست بنویسید

فرم ارسال نظرات