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

شرط‌ها و تصمیم‌گیری

شرط‌ها و تصمیم‌گیری

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

محتوای درس شرط‌ها و تصمیم‌گیری

ساختارهای شرطی مسیر اجرای برنامه را بر اساس وضعیت داده تغییر می‌دهند. طراحی شرط‌های ساده و قابل خواندن از ایجاد منطق پیچیده و خطاپذیر جلوگیری می‌کند.

۱. if و else

if یک Expression منطقی را ارزیابی می‌کند. else مسیر جایگزین را تعریف می‌کند و else if برای چند حالت ترتیبی مناسب است.

مثال

int age=20;
         if(age>=18) Console.WriteLine("Adult");
         else Console.WriteLine("Minor");

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

۲. شرط‌های تو در تو

Nested if در برخی سناریوها لازم است، اما افزایش عمق تو در تو شدن معمولاً نشانه نیاز به ساده‌سازی منطق است.

مثال

bool active=true; bool admin=true;
         if(active) { if(admin) Console.WriteLine("Admin"); }

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

۳. switch Statement

switch برای انتخاب میان حالت‌های مشخص مناسب است و Pattern Matching قابلیت آن را فراتر از مقایسه ساده می‌برد.

مثال

string role="Admin";
         switch(role){case "Admin": Console.WriteLine("Full"); break; default: Console.WriteLine("Read"); break;}

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

۴. Switch Expression

Switch Expression زمانی مناسب است که هدف نگاشت یک مقدار به مقدار دیگر باشد.

مثال

int day=2;
         string name=day switch {1=>"Sat",2=>"Sun",_=>"Other"};
         Console.WriteLine(name);

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

۵. Guard Clause

خروج زودهنگام در شرایط نامعتبر می‌تواند عمق تو در تو شدن و پیچیدگی متد را کاهش دهد.

مثال

static decimal Pay(decimal amount){ if(amount<=0) throw new ArgumentOutOfRangeException(); return amount; }
         Console.WriteLine(Pay(100));

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

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

int age = 22;
         
         if (age < 0)
         {
             Console.WriteLine("Invalid age");
         }
         else if (age >= 18)
         {
             Console.WriteLine("Adult");
         }
         else
         {
             Console.WriteLine("Minor");
         }

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

string status = score switch
         {
             >= 90 => "Excellent",
             >= 75 => "Good",
             >= 60 => "Passed",
             _ => "Failed"
         };

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

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

• شرط‌های چندلایه با عمق زیاد

• تکرار یک شرط در چند شاخه

• استفاده از switch برای منطق ترتیبی که if خواناتر است

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

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

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

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

۹. تمرین عملی

سیستم تعیین سطح امتیاز طراحی کنید که عدد ۰ تا ۱۰۰ را دریافت و وضعیت مناسب را با Switch Expression نمایش دهد.

۱۰. جمع‌بندی

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