فصل 31 از 40 درس 1 از 1

Null و Nullable Reference Types

Null و Nullable Reference Types

بخشی از آموزش جامع C# و .NET 10

محتوای درس Null و Nullable Reference Types

Null یکی از منابع اصلی خطا در نرم‌افزار است. Nullable Reference Types تحلیل کامپایلر را برای مشخص کردن قرارداد null به کد اضافه می‌کند و طراحی API را شفاف‌تر می‌سازد.

۱. Nullable Value Types

Value Typeها با ? می‌توانند null بپذیرند؛ مانند int?.

مثال

int? id=null; Console.WriteLine(id ?? 0);

در این مثال، مفهوم «Nullable Value Types» در یک قطعه کد مستقل نمایش داده شده است. مقدارها و نام‌ها عمداً ساده انتخاب شده‌اند تا رفتار اصلی قابل مشاهده باشد؛ در پروژه واقعی همین الگو با مدل دامنه، اعتبارسنجی و مدیریت خطای متناسب ترکیب می‌شود.

۲. Nullable Reference Types

string و string? قراردادهای متفاوتی دارند و کامپایلر مسیرهای احتمالی null را تحلیل می‌کند.

مثال

string? name=null; Console.WriteLine(name?.Length ?? 0);

در این مثال، مفهوم «Nullable Reference Types» در یک قطعه کد مستقل نمایش داده شده است. مقدارها و نام‌ها عمداً ساده انتخاب شده‌اند تا رفتار اصلی قابل مشاهده باشد؛ در پروژه واقعی همین الگو با مدل دامنه، اعتبارسنجی و مدیریت خطای متناسب ترکیب می‌شود.

۳. Null-conditional

?. و ?[] دسترسی به عضو را فقط در صورت non-null بودن انجام می‌دهند.

مثال

User? u=null; Console.WriteLine(u?.Name ?? "Unknown");

در این مثال، مفهوم «Null-conditional» در یک قطعه کد مستقل نمایش داده شده است. مقدارها و نام‌ها عمداً ساده انتخاب شده‌اند تا رفتار اصلی قابل مشاهده باشد؛ در پروژه واقعی همین الگو با مدل دامنه، اعتبارسنجی و مدیریت خطای متناسب ترکیب می‌شود.

۴. Null-coalescing

?? مقدار جایگزین و ??= مقداردهی در صورت null را فراهم می‌کنند.

مثال

string? x=null; x ??= "Default"; Console.WriteLine(x);

در این مثال، مفهوم «Null-coalescing» در یک قطعه کد مستقل نمایش داده شده است. مقدارها و نام‌ها عمداً ساده انتخاب شده‌اند تا رفتار اصلی قابل مشاهده باشد؛ در پروژه واقعی همین الگو با مدل دامنه، اعتبارسنجی و مدیریت خطای متناسب ترکیب می‌شود.

۵. Null-forgiving

! هشدار تحلیلگر را خاموش می‌کند اما مقدار را تغییر نمی‌دهد؛ بنابراین باید محدود و مستدل استفاده شود.

مثال

for(int i=1;i<=5;i++) Console.WriteLine(i);

در این مثال، مفهوم «Null-forgiving» در یک قطعه کد مستقل نمایش داده شده است. مقدارها و نام‌ها عمداً ساده انتخاب شده‌اند تا رفتار اصلی قابل مشاهده باشد؛ در پروژه واقعی همین الگو با مدل دامنه، اعتبارسنجی و مدیریت خطای متناسب ترکیب می‌شود.

۶. مثال‌های عملی

string? name = GetName();
         int length = name?.Length ?? 0;
         string displayName = name ?? "Unknown";

این نمونه عملی چند مفهوم فصل را در کنار هم قرار می‌دهد و برای مشاهده رفتار واقعی کد قابل اجرا و تغییر است.

static void PrintName(string name)
         {
             ArgumentException.ThrowIfNullOrWhiteSpace(name);
             Console.WriteLine(name);
         }

این نمونه عملی چند مفهوم فصل را در کنار هم قرار می‌دهد و برای مشاهده رفتار واقعی کد قابل اجرا و تغییر است.

۷. خطاهای رایج

• خاموش کردن گسترده هشدارها با !

• استفاده از string? برای هر داده بدون تحلیل قرارداد

• بررسی null دیرهنگام پس از چند مرحله پردازش

۸. نکات اجرایی

• نام‌ها، Typeها و Methodها را متناسب با مفهوم دامنه و بدون ابهام انتخاب کنید.

• هشدارهای کامپایلر و Nullable را بدون بررسی خاموش نکنید.

• منطق هر بخش را تا حد امکان کوچک، قابل تست و مستقل از I/O غیرضروری نگه دارید.

۹. تمرین عملی

مدلی برای Profile طراحی کنید که Name اجباری و Bio اختیاری باشد و متدی برای نمایش امن اطلاعات ایجاد کنید.

۱۰. جمع‌بندی

در این فصل، مبانی «Null و Nullable Reference Types» با تمرکز بر ساختارهای اصلی زبان، الگوهای صحیح استفاده و خطاهای رایج بررسی شد. تسلط بر این مفاهیم زمینه لازم برای اتصال موضوع به فصل‌های بعدی و طراحی کدهای خواناتر، قابل نگهداری و قابل تست را فراهم می‌کند.