مشخصات مقاله
-
2465
-
0.0
-
8582
-
0
-
0
عملگر and (&& operator) در سی شارپ
بسیاری موارد پیش می آید که لازم است تا دو یا چند شرط را با هم ترکیب کرده و تصمیم مورد نظر خود را بر پایه نتیجه ترکیب آن ها بگیریم. در تقریبا تمامی زبان های برنامه نویسی امکان ترکیب شرط ها همانند آنچه در جبر بول و ترکیب گزاره ها وجود دارد ("و"، "یا"، "نقیض") پشتیبانی شده است. در این بخش از آموزش سی شارپ می خواهیم به اولین حالت این ترکیب که "and در سی شارپ" است بپردازیم.
تصور کنید دلال املاک و مستغلاتی که از برنامه ی شما استفاده می کند با یک خریدار بالقوه ملاقات دارد و سوالات زیر را از برنامه می پرسد.
using System;
public enum HouseType
{
Unknown,
SingleFamily,
Townhouse,
Condominium
}
public class Program
{
static int Main()
{
var type = HouseType.Unknown;
var choice = 0;
var value = 0D;
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;
if (choice == 2)
type = HouseType.Townhouse;
if (choice == 3)
type = HouseType.Condominium;
Console.Write("Up to how much can you afford? $");
value = double.Parse(Console.ReadLine());
Console.WriteLine("\nDesired House Type: {0}", type);
Console.WriteLine("Maximum value afforded: {0:C}\n", value);
return 0;
}
}
تصور کنید مشتری به این سوالات پاسخ می دهد : می گوید که خانه ی تک خانوار (single family house) می خواهد ولی توان پرداخت بیش از $550,000 را ندارد.
Enter the type of house you want to purchase 1. Single Family 2. Townhouse 3. Condominium You Choice? 1 Up to how much can you afford? $550000 Desired House Type: SingleFamily Maximum value afforded: $550,000.00 Press any key to continue...
هنگام بررسی خانه برای چنین مشتریی, دو پارامتر باید در نظر گرفته و اعتبار سنجی شود : خانه ی مذکور باید برای تک خانوار تعبیه شده باشد و قیمت آن زیر مبلغ $550,001 باشد. بر این اساس, دو دستور به شکل زیر می نویسیم.
a. The house is single family b. The house costs less than $550,000
از لیست املاک و مستغلات, چنانچه خانه ای با این مشخصه (تک خانوار بودن آن) پیدا کریدم آن را داخل فهرست املاک مورد نظرمان قرار می دهیم.
از سوی دیگر, در صورت پیدا کردن خانه ای با قیمت $550,000 یا پایین تر از آن, خانه را بررسی می کنیم.
یکی از راه های ترکیب دو مقایسه, پیوند دادن آن ها است. برای مشتری مزبور خانه ای را انتخاب می کنیم که (هر) دو مشخصه ی فوق را دارا باشد. اگر خانه ی مورد نظر town house باشد, طبق خواسته ی مشتری, مقدار شرطی آن غلط (false) خواهد بود. اگر قیمت خانه بیش از $550,000 باشد, باز هم مقدار Boolean Value ناصحیح خواهد بود.
در C#, عملگر بولی AND با && اجرا می شود.
مثال:
using System;
public enum HouseType
{
Unknown,
SingleFamily,
Townhouse,
Condominium
}
public class Exercise
{
static int Main()
{
var type = HouseType.Unknown;
var choice = 0;
var value = 0D;
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());
Console.Write("Up to how much can you afford? $");
value = double.Parse(Console.ReadLine());
if(choice == 1)
type = HouseType.SingleFamily;
if (choice == 2)
type = HouseType.Townhouse;
if (choice == 3)
type = HouseType.Condominium;
Console.WriteLine("\nDesired House Type: {0}", type);
Console.WriteLine("Maximum value afforded: {0:C}", value);
if (type == HouseType.SingleFamily && value <= 550000)
Console.WriteLine("\nDesired House Matched");
return 0;
}
}
نمونه ای از اجرای برنامه
Enter the type of house you want to purchase 1. Single Family 2. Townhouse 3. Condominium You Choice? 1 Up to how much can you afford? $450000 Desired House Type: SingleFamily Maximum value afforded: $450,000.00 Desired House Matched Press any key to continue...
اساساً, ترکیب عطفی منطقی (logical conjunction) دو شرط را با هم ادغام می کند. به منظور بهبود خوانایی برنامه, می توان هر طرف شرط را داخل پرانتز جای داد.
مثال:
using System;
public enum HouseType
{
Unknown,
SingleFamily,
Townhouse,
Condominium
}
public class Exercise
{
static int Main()
{
var type = HouseType.Unknown;
var choice = 0;
var value = 0D;
if( (type == HouseType.SingleFamily) && (value <= 550000) )
Console.WriteLine("\nDesired House Matched");
return 0;
}
}
تصور کنید خانه ای با مشخصه ی اول (single family) پیدا کردیم. پس اولین شرط لازم برای مشتری برآورده شد. به کمک عملگر بولی AND, به سراغ معیار دوم می رویم. تصور کنید خانه ای که در نظر گرفته ایم, $750,500 است : مبلغ مورد نیاز از قدرت خرید مشتری فراتر است. بنابراین, شرط دوم برآورده نمی شود (false است). در جبر بولی AND, اگر هم شرط اول درست باشد, در صورت ناصحیح بودن شرط یا معیار دوم کل شرط غلط تلقی می گردد.
مثال:
using System;
public enum HouseType
{
Unknown,
SingleFamily,
Townhouse,
Condominium
}
class Program
{
static void Main()
{
var type = HouseType.Unknown;
int choice;
var value = 0M;
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;
if (choice == 2)
type = HouseType.Townhouse;
if (choice == 3)
type = HouseType.Condominium;
Console.Write("Up to how much can you afford? $");
value = decimal.Parse(Console.ReadLine());
Console.WriteLine("\nDesired House Type: {0}", type);
Console.WriteLine("Maximum value afforded: {0:C}", value);
if (type == HouseType.SingleFamily && value <= 550000)
Console.WriteLine("\nDesired House Matched");
else
Console.WriteLine("\nThe House Doesn't Match the Desired Criteria");
}
}
نمونه ای از اجرای برنامه
Enter the type of house you want to purchase 1. Single Family 2. Townhouse 3. Condominium You Choice? 1 Up to how much can you afford? $750000 Desired House Type: SingleFamily Maximum value afforded: $750,000.00 The House Doesn't Match the Desired Criteria Press any key to continue...
حال تصور کنید خانه ی از نوع townhouse (برای چندین خانوار) پیدا کرده ایم که $420,000 هزینه بر می دارد. اگرچه دومین شرط صحیح است, اولین معیار در نظر گرفته نشده. در جبر بولی, چنانچه حتی یکی از شرایط ناصحیح باشد, عملیات AND کلاً غلط می شود.
مثالی از اجرای برنامه، زیر قابل مشاهده می باشد :
Enter the type of house you want to purchase 1. Single Family 2. Townhouse 3. Condominium You Choice? 2 Up to how much can you afford? $420000 Desired House Type: Townhouse Maximum value afforded: $420,000.00 The House Doesn't Match the Desired Criteria Press any key to continue...
چنانچه خانه ای تک خانوار (single family) با قیمت $345،000 پیدا کنیم، هر دو شرط برآورده می شود. در جبر بولی، در صورتی که هر دو شرط صحیح باشند، عملیات AND نیز true محسوب می شود.
مثالی از اجرای برنامه، زیر قابل مشاهده می باشد :
Enter the type of house you want to purchase 1. Single Family 2. Townhouse 3. Condominium You Choice? 1 Up to how much can you afford? $345000 Desired House Type: SingleFamily Maximum value afforded: $345،000.00 Desired House Matched Press any key to continue...
چهار جدول بالا را می توان به صورت زیر ادامه داد.
همان طور که مشاهده می کنید عطف منطقی تنها زمانی به true ارزیابی می شود که هر دو شرط درست باشند. در برخی موارد لازم است چندین شرط (بیش از دو شرط) را با هم ادغام یا ترکیب کنیم. تصور کنید مراجعه کننده ای قصد خرید خانه ای با گنجایش ظرفیت یک خانوار (single family house) و مجهز به پارکینگ (indoor garage) که $450،000 قیمت آن است را دارد. به عبارت دیگر خانه ی مذکور باید سه شرط زیر را داشته باشد.
a. The house is a single family home b. The house costs less than $450,001 c. The house has an indoor garage
برنامه ی زیر شرایط بالا را مورد بررسی قرار می دهد.
using System;
public enum HouseType
{
Unknown,
SingleFamily,
Townhouse,
Condominium
}
public class Exercise
{
static int Main()
{
var type = HouseType.Unknown;
var choice = 0;
var value = 0D;
var hasIndoorGarage = false;
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;
if (choice == 2)
type = HouseType.Townhouse;
if (choice == 3)
type = HouseType.Condominium;
Console.Write("Up to how much can you afford? $");
value = double.Parse(Console.ReadLine());
Console.Write("Does the house have an indoor garage (1=Yes/0=No)? ");
int ans = int.Parse(Console.ReadLine());
Console.WriteLine("\nDesired House Type: {0}", type);
Console.WriteLine("Maximum value afforded: {0:C}", value);
Console.Write("House has indoor garage: ");
if (ans == 1)
Console.WriteLine("Yes");
else
Console.WriteLine("No");
if ((type == HouseType.SingleFamily) && (value <= 550000) && (ans == 1))
Console.WriteLine("\nDesired House Matched");
else
Console.WriteLine("\nThe House Doesn't Match the Desired Criteria");
return 0;
}
}
همان طور که پیش تر ذکر شد، زمانی که دو شرط با هم ترکیب می شوند، compiler ابتدا شرط اول را چک می کند سپس شرط دوم را مورد بررسی قرار می دهد. به همین ترتیب، چنانچه لازم است سه شرط لحاظ شود، compiler در وهله ی اول درستی اولین شرط را ارزیابی می کند.
در صورتی که شرط اول (یا هر یک از شروط) غلط باشد، کل شرط نادرست اطلاق می گردد ، صرفنظر از نتیجه ی شرط دوم. اگر شرط اول صحیح بود، شرط دوم ارزیابی می شود.
چنانچه شرط دوم نادرست بود، کل ترکیب غلط تلقی می گردد.
حین ارزیابی سه شرط بالا اگر شرط اول یا دوم ناصحیح باشد، به دلیل اینکه کل شرط نادرست محسوب می شود، دیگر دلیلی برای بررسی شرط سوم وجود ندارد. اگر هر دو شرط اول و دوم غلط باشند باز هم ارزیابی شرط سوم لزومی ندارد. فقط در صورت صحیح بودن دو شرط مذکور شرط سوم ارزیابی می شود.
ترکیبی از سه شرط بالا در عطف منطقی بدین صورت نمایش داده می شود : A && B && C. بار دیگر، چنانچه شرط سوم نادرست باشد، کل شرط غلط می شود.
مثال:
Enter the type of house you want to purchase 1. Single Family 2. Townhouse 3. Condominium You Choice? 1 Up to how much can you afford? $425000 Does the house have an indoor garage (1=Yes/0=No)? 0 Desired House Type: SingleFamily Maximum value afforded: $425,000.00 House has indoor garage: No The House Doesn't Match the Desired Criteria Press any key to continue...
کل شرط تنها زمانی صحیح (true) در نظر گرفته می شود که هر سه شرط درست باشند.