مشخصات مقاله
-
3676
-
0.0
-
27784
-
0
-
0
عملگر ?: (?: Operator) در سی شارپ
توی برنامهنویسی همیشه لازم نیست برای هر شرط ساده از ساختار کامل if...else استفاده کنیم. زبان C# برای بعضی از این موقعیتها عملگرهایی در اختیارمون قرار میده که میتونن شکل کوتاهتر و جمعوجورتری از بعضی شرطها باشن و باعث بشن کدمون خواناتر و مرتبتر باشه.
توی این مقاله با چند روش و عملگر پرکاربرد برای کار با شرطها آشنا میشیم؛ از عملگر سهتایی گرفته تا عملگر ?? که برای کار با مقدارهای null استفاده میشه. اگه در مسیر یادگیری C# هستید، شناخت این ساختارها کمک میکنه شرطها رو بهتر درک کنید و در زمان نوشتن کد، انتخابهای بیشتری داشته باشید.
این عملگرها در بعضی موقعیتها میتونن جایگزین کوتاهتری برای if...else باشن. اگه هر بلوک از دستورات if...else فقط یک دستور اجرایی داشته باشه، میتونیم از این روشها بهعنوان جایگزین استفاده کنیم.
عملگر سه تایی (?:)
فرض کنید شرطی دارید که باید اول با if بررسی بشه و اگه شرط برقرار نبود، دستور دیگهای در بخش else اجرا بشه. توی چنین شرایطی میتونید از عملگر سهتایی استفاده کنید. این عملگر از ترکیب "?" و ":" ساخته شده و شکل کلی استفاده از اون به صورت زیره.
Condition ? Statement1 : Statement2;
کامپایلر اول Condition رو بررسی میکنه. اگه Condition درست باشه، Statement1 اجرا میشه و اگه شرط درست نباشه، Statement2 اجرا خواهد شد. برنامه زیر با استفاده از عملگر شرطی، دو عدد رو با هم مقایسه میکنه و عدد بزرگتر رو مشخص میکنه.
مثال:
using System;
public class Exercise
{
static int Main()
{
var Number1 = 0;
var Number2 = 0;
var Maximum = 0;
var Num1 = "";
var Num2 = "";
Console.Write("Enter first numbers: ");
Num1 = Console.ReadLine();
Console.Write("Enter second numbers: ");
Num2 = Console.ReadLine();
Number1 = int.Parse(Num1);
Number2 = int.Parse(Num2);
Maximum = (Number1 < Number2) ? Number2 : Number1;
Console.Write("\nThe maximum of ");
Console.Write(Number1);
Console.Write(" and ");
Console.Write(Number2);
Console.Write(" is ");
Console.WriteLine(Maximum);
Console.WriteLine();
return 0;
}
}
نتیجه اجرای برنامه به صورت زیره:
Enter first numbers: 244 Enter second numbers: 68 The maximum of 244 and 68 is 244
همونطور که میبینید، کامپایلر اول Condition رو بررسی میکنه. اگه Condition درست باشه، Statement1 اجرا میشه و در غیر این صورت Statement2 اجرا خواهد شد. در این مثال هم دو عدد با هم مقایسه میشن و عدد بزرگتر در Maximum قرار میگیره.
عملگر " ?? "
حالا بریم سراغ یکی دیگه از عملگرهای کاربردی C#، یعنی "??". این عملگر زمانی به کار میاد که با متغیرهایی سروکار داشته باشیم که ممکنه مقدار null داشته باشن. با استفاده از اون میتونیم مشخص کنیم اگه متغیر اصلی مقدار داشت، همون مقدار استفاده بشه و اگه null بود، یک مقدار جایگزین در نظر گرفته بشه.
مثال:
using System;
public class Exercise
{
public static int Main()
{
double? distance = null;
Console.WriteLine();
return 0;
}
}
ممکنه بخوایم مقدار چنین متغیری رو به یک متغیر دیگه اختصاص بدیم. اگه مقدار متغیر null باشه، یعنی مقداری نداشته باشه یا مقدارش تهی باشه، نمیتونیم بدون در نظر گرفتن این موضوع اون رو مستقیماً به متغیر دیگهای اختصاص بدیم. پس اول باید بررسی کنیم که متغیر موردنظر مقدار null داره یا یک مقدار واقعی. در واقع از compiler میخوایم مقدار متغیر رو بررسی کنه و مشخص کنه که مقدار اون null هست یا نه. اگه متغیر مقدار واقعی داشته باشه، یعنی null نباشه، میتونیم همون مقدار رو به متغیر جدید اختصاص بدیم. اما اگه مقدار متغیر null باشه، میتونیم یک مقدار جایگزین برای اون در نظر بگیریم. زبان C# برای انجام این کار عملگر "??" رو در اختیارمون قرار داده. شکل استفاده از این عملگر به صورت زیره.
TargetVariable = OriginalVariable ?? AlternateValue;
اول باید OriginalVariable رو تعریف کنید. این متغیر باید بتونه مقدار null رو نگه داره که با اضافه کردن عملگر ? به نوع اون، این امکان فراهم میشه. توجه داشته باشید که TargetVariable میتونه قبل از مقداردهی اولیه تعریف بشه یا همزمان با مقداردهی اون تعریف بشه. همچنین نوع هر دو متغیر باید با هم سازگار باشه. مثال زیر نحوه استفاده از عملگر ?? رو نشون میده.
مثال:
using System;
public class Exercise
{
public static int Main()
{
double? distance = null;
double? fromTo = null;
Console.WriteLine("Distance 1: {0}", distance);
Console.WriteLine("Distance 2: {0}", fromTo);
fromTo = distance ?? 135.85;
Console.WriteLine("Distance 1: {0}", distance);
Console.WriteLine("Distance 2: {0}", fromTo);
Console.WriteLine();
return 0;
}
}
دستور fromTo = distance ?? 135.85; در واقع دو حالت رو مشخص میکنه. اگه متغیر distance در حال حاضر مقدار غیرتهی (non-null) داشته باشه، همون مقدار به متغیر fromTo اختصاص داده میشه. اما اگه distance مقدار null داشته باشه، مقدار 135.85 به اون اختصاص داده میشه. کد بالا نتیجه زیر رو تولید میکنه.
Distance 1: Distance 2: Distance 1: Distance 2: 135.85 Press any key to continue...
نسخه دیگر برنامه
using System;
public class Exercise
{
public static int Main()
{
double? distance = null;
double? fromTo = null;
Console.WriteLine("Distance 1: {0}", distance);
Console.WriteLine("Distance 2: {0}", fromTo);
Console.WriteLine("---------------------");
fromTo = distance ?? 135.85;
Console.WriteLine("Distance 1: {0}", distance);
Console.WriteLine("Distance 2: {0}", fromTo);
Console.WriteLine("---------------------");
distance = 8284.26;
fromTo = distance ?? 135.85;
Console.WriteLine("Distance 1: {0}", distance);
Console.WriteLine("Distance 2: {0}", fromTo);
Console.WriteLine();
return 0;
}
}
این بار برنامه نتیجه زیر رو نمایش میده.
Distance 1: Distance 2: --------------------- Distance 1: Distance 2: 135.85 --------------------- Distance 1: 8284.26 Distance 2: 8284.26 Press any key to continue...
نسخه دیگر برنامه
if...else if و if...else
توی ساختار شرطی if...else میتونیم دو حالت رو بررسی کنیم؛ اما بعضی وقتها لازم داریم چند شرط مختلف رو بررسی کنیم. برای چنین شرایطی میتونیم از ساختار if...else if استفاده کنیم. شکل کلی این ساختار به صورت زیره.
if(Condition 1) Statement 1; else if(Condition 2) Statement 2
کامپایلر اول Condition1 رو بررسی میکنه. اگه Condition1 درست (true) باشه، Statement1 اجرا میشه. اگه Condition1 غلط (false) باشه، کامپایلر میره سراغ Condition2. اگه Condition2 هم درست باشه، Statement2 اجرا میشه. هر نتیجه دیگهای نادیده گرفته میشه. مثال زیر نحوه استفاده از این ساختار رو نشون میده.
using System;
public enum HouseType
{
Unknown,
SingleFamily,
Townhouse,
Condominium
}
public class Exercise
{
static int Main()
{
var type = HouseType.Unknown;
var choice = 0;
var garage = "";
Console.WriteLine("Enter the type of house you want to purchase");
Console.WriteLine("1. Single Family");
Console.WriteLine("2. Townhouse");
Console.WriteLine("3. Condominium");
Console.Write("You Choice? ");
choice = int.Parse(Console.ReadLine());
if (choice == 1) type = HouseType.SingleFamily;
else if (choice == 2) type = HouseType.Townhouse;
Console.Write("Does the house have an indoor garage (1=Yes/0=No)? ");
var answer = int.Parse(Console.ReadLine());
if (answer == 1)
garage = "Yes";
else
garage = "No";
Console.WriteLine("\nDesired House Type: {0}", type);
Console.WriteLine("Has indoor garage? {0}", garage);
return 0;
}
}
مثالی از اجرای برنامه:
Enter the type of house you want to purchase 1. Single Family 2. Townhouse 3. Condominium You Choice? 1 Does the house have an indoor garage (1=Yes/0=No)? 1 Desired House Type: SingleFamily Has indoor garage? Yes Press any key to continue...
توی مثال زیر هم میتونید اجرای برنامه رو در یک حالت دیگه ببینید.
Enter the type of house you want to purchase 1. Single Family 2. Townhouse 3. Condominium You Choice? 2 Does the house have an indoor garage (1=Yes/0=No)? 6 Desired House Type: Townhouse Has indoor garage? No Press any key to continue...همونطور که میبینید، فقط دو شرط بررسی شدن و هر شرطی غیر از این دو مورد نادیده گرفته میشه. C# در نهایت یک else رو بهعنوان حالت جایگزین در نظر میگیره. شکل کلی این ساختار به صورت زیره.
if(Condition 1) Statement 1; else if(Condition 2) Statement 2; else if(Condition 3) Statement 3; else Statement-n;
if(Condition 1) Statement 1; else if(Condition 2) Statement 2; else Statement-n;
اول Condition1 بررسی میشه. اگه Condition1 درست باشه، Statement1 اجرا میشه. اگه درست نباشه، Condition2 بررسی میشه و در صورت درست بودن، Statement2 اجرا خواهد شد. به همین شکل، هر بار که کامپایلر یکی از Conditionها رو true تشخیص بده، دستور مربوط به همون شرط اجرا میشه. اگه Condition-n هم غلط باشه، کامپایلر سراغ شرط بعدی میره. به زبان ساده، با استفاده از ساختار else if میتونید هر تعداد شرطی که لازم دارید توی برنامه قرار بدید. اگه بعد از بررسی همه حالتهای احتمالی، بخواید یک حالت پیشفرض هم برای شرایط پیشبینینشده داشته باشید، میتونید از else استفاده کنید.
مثال:
using System;
public enum HouseType
{
Unknown,
SingleFamily,
Townhouse,
Condominium
}
public class Exercise
{
public static int Main()
{
var type = HouseType.Unknown;
var choice = 0;
var garage = "";
Console.WriteLine("Enter the type of house you want to purchase");
Console.WriteLine("1. Single Family");
Console.WriteLine("2. Townhouse");
Console.WriteLine("3. Condominium");
Console.Write("You Choice? ");
choice = int.Parse(Console.ReadLine());
if (choice == 1)
type = HouseType.SingleFamily;
else if (choice == 2)
type = HouseType.Townhouse;
else if (choice == 3)
type = HouseType.Condominium;
else
type = HouseType.Unknown;
Console.Write("Does the house have an indoor garage (1=Yes/0=No)? ");
var answer = int.Parse(Console.ReadLine());
if (answer == 1)
garage = "Yes";
else
garage = "No";
Console.WriteLine("\nDesired House Type: {0}", type);
Console.WriteLine("Has indoor garage? {0}", garage);
return 0;
}
}
نتیجه اجرای برنامه:
Enter the type of house you want to purchase 1. Single Family 2. Townhouse 3. Condominium You Choice? 3 Does the house have an indoor garage (1=Yes/0=No)? 0 Desired House Type: Condominium Has indoor garage? No Press any key to continue...
اگه میخواید مباحث شرطی و بقیه مفاهیم برنامهنویسی با C# رو منظم و کاربردی یاد بگیرید، قدم بعدی میتونه این باشه که با ساختارهای مختلف این زبان بیشتر آشنا بشید و اونها رو توی پروژههای مختلف تمرین کنید. برای ادامه مسیر میتونید به دوره آموزش C# سر بزنید و مباحث این زبان رو به شکل منسجمتر دنبال کنید.
عملگر سه تایی (?:)