گزارههای if
در C# یک گزارهی if دارای ساختار کلی زیر است.
if (condition)
{
}
else
{
}
در اینجا condition یک عبارت شرطی است که اگر مقدارش true باشد، دستورات
بلاک if و اگر false باشد، دستورات بلاک else اجرا میشوند.
توجه داشته باشید که C# مقادیر غیر بولین را به عنوان شرط بلاک if نمیپذیرد.
این موضوع را بهخصوص کسانی که با زبانهایی مانند جاوااسکریپت و پایتون کار کردهاند، باید
در نظر داشته باشند. در این زبانها هر مقداری که به عنوان شرط بلاک if وارد شود، به طور
ضمنی به مقدار بولین معادلش
تبدیل میشود اما در C# عبارت بلاک if حتماً باید بولین باشد.
البته از بخش else میتوان صرفنظر کرد که در این صورت، اگر condition برابر با
true
باشد، دستورات بلاک if اجرا میشوند و در غیر این صورت، بلاک if نادیده
گرفته میشود.
یک پروژهی جدید با نام BranchingInCsharp ایجاد کنید و کد زیر را در فایل Program.cs وارد کنید.
Program.cs
Console.Write("Enter Your Score: ");
double score = Convert.ToDouble(Console.ReadLine());
if (score >= 10)
{
Console.WriteLine("Ok , You are passed");
}
else
{
Console.WriteLine("Sorry , You are not passed");
}
کاری که این کد انجام میدهد این است که ابتدا از کاربر میخواهد که یک عدد
را وارد کند. سپس، ورودی کاربر را که از نوع string است، به یک double
تبدیل میکند.
در ادامه، بسته به مقدار این عدد، پیغام مناسبی را چاپ میکند.
دقت کنید که در گزارهی دوم چطور متد ReadLine() به متد ToDouble() پاس شده تا
ورودی کاربر به double تبدیل شود و در متغیری به نام score ذخیره شود.
گزارههای else if
وقتی بیش از یک شرط داشته باشیم، میتوانیم از گزارههای else if استفاده کنیم.
فرض کنید قصد داریم کدی بنویسیم که دو عدد را از کاربر دریافت کند و
نتیجهی مقایسهی آنها را با یک پیغام مناسب، چاپ کند.
Program.cs
string message;
Console.Write("Enter First Number: ");
double first = Convert.ToDouble(Console.ReadLine());
Console.Write("Enter Second Number: ");
double second = Convert.ToDouble(Console.ReadLine());
if (first == second)
{
message = $"{first} equal {second}";
}
else if (first > second)
{
message = $"{first} greater than {second}";
}
else
{
message = $"{first} less than {second}";
}
Console.WriteLine(message);
برنامه را اجرا کنید و آن را با مقادیر ورودی مختلف، تست کنید.
عملگر شرطی Ternary
گزارههای شرطی ساده را میتوان به جای if else با استفاده از عملگر شرطی ternary
به شکل خلاصهتری نوشت. از این عملگر به فرم زیر استفاده میشود.
condition ? first_expression : second_expression;
اگر condition برابر با true باشد، عبارت بعد از علامت سؤال و اگر false باشد، عبارت
بعد از دونقطه برگردانده میشود. مثال زیر را ببینید.
Program.cs
int i = 8;
string result = i % 2 == 0 ? "even" : "odd";
در اینجا مقدار even در متغیر result ذخیره میشود اما اگر یک عدد فرد را به i بدهیم،
مقدار odd در result ذخیره خواهد شد.
توجه داشته باشید که عملگر ternary را فقط میتوان در گزارههای تخصیص به کار
گرفت و بنابراین، نوع مقادیر بعد از علامت سؤال و بعد از دونقطه باید یکی باشد.
گزارهها و عبارات switch
یکی دیگر از ساختارهای شرطی C# گزارهی switch است که به ما
امکان میدهد یک متغیر یا یک عبارت را با مجموعهای از مقادیر مقایسه کنیم تا بر اساس آن،
کدی که باید اجرا شود، مشخص شود.
گاهی اوقات استفاده از یک گزارهی switch به جای چندین گزارهی else
if، انتخاب
بهصرفهتری است. ساختار کلی یک گزارهی switch به صورت زیر است.
switch (expression)
{
case value1:
break;
case value2:
break;
default:
break;
}
عبارت switch که در اینجا با expression مشخص شده، با مقادیری که بعد از
case آورده شده مقایسه میشود و با هر کدام که برابر باشد، دستورات همان case اجرا
میشود. اگر expression با هیچیک از این مقادیر یکسان نباشد، دستورات بعد از default اجرا میشود.
استفاده از default اختیاری است اما هر case باید با break; به پایان برسد.
مثال زیر را ببینید.
Program.cs
Console.Write("Your rank: ");
int rank = Convert.ToInt32(Console.ReadLine());
switch (rank)
{
case 1:
Console.WriteLine("Gold Medal");
break;
case 2:
Console.WriteLine("Silver Medal");
break;
case 3:
Console.WriteLine("Bronze Medal");
break;
default:
Console.WriteLine("No Medal");
break;
}
اگر چند case کد یکسانی داشته باشند، میتوانیم آنها را با هم ترکیب کنیم تا
از تکرار بیمورد کدها جلوگیری شود. مثال زیر را ببینید.
Program.cs
Console.Write("Your rank: ");
int rank = Convert.ToInt32(Console.ReadLine());
switch (rank)
{
case 1:
case 2:
case 3:
Console.WriteLine("You get a medal");
break;
default:
Console.WriteLine("You don't get a medal");
break;
}
عبارات switch
از C# 8 به بعد، امکان استفاده از switch به عنوان عبارت
(expression) وجود دارد.
یک عبارت switch مثل هر عبارت دیگر، یک مقدار برمیگرداند و این به ما امکان
میدهد که در گزارههای تخصیص و
یا در هر جایی که انتظار یک مقدار (value) میرود، از یک عبارت switch استفاده کنیم.
در کد زیر، مثال بالا را با استفاده از یک عبارت switch به جای یک گزارهی switch نوشتهایم که مختصرتر و
تر و تمیزتر به نظر میرسد.
Program.cs
Console.Write("Your rank: ");
int rank = Convert.ToInt32(Console.ReadLine());
string result = rank switch
{
1 => "Gold Mrdal",
2 => "Silver Medal",
3 => "Bronze Medal",
_ => "No Medal"
};
Console.WriteLine(result);