کانال بله, جهت پشتیبانی و اطلاع رسانی کانال بله, جهت پشتیبانی و اطلاع رسانی
عضویت

عملگر 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

از لیست املاک و مستغلات, چنانچه خانه ای با این مشخصه (تک خانوار بودن آن) پیدا کریدم آن را داخل فهرست املاک مورد نظرمان قرار می دهیم.

Type of House
House
The house is single family
True

از سوی دیگر, در صورت پیدا کردن خانه ای با قیمت $550,000 یا پایین تر از آن, خانه را بررسی می کنیم.

Price Range
Value
550,000 USD
True

یکی از راه های ترکیب دو مقایسه, پیوند دادن آن ها است. برای مشتری مزبور خانه ای را انتخاب می کنیم که (هر) دو مشخصه ی فوق را دارا باشد. اگر خانه ی مورد نظر town house باشد, طبق خواسته ی مشتری, مقدار شرطی آن غلط (false) خواهد بود. اگر قیمت خانه بیش از $550,000 باشد, باز هم مقدار Boolean Value ناصحیح خواهد بود.

Type of House
House Value
Result
Town House
625,000 USD
Town House AND 625,000 USD
False
False
False

در 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, اگر هم شرط اول درست باشد, در صورت ناصحیح بودن شرط یا معیار دوم کل شرط غلط تلقی می گردد.

Type of House
House Value
Result
Single Family
750,500 USD
Single Family AND 750,500 USD
True
False
False

مثال:

             
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 کلاً غلط می شود.

Type of House
House Value
Result
Town House
420,500 USD
Town House AND 420,500 USD
False
True
False

مثالی از اجرای برنامه، زیر قابل مشاهده می باشد :

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 محسوب می شود.

Type of House
House Value
Result
Single Family
345,000 USD
Single Family AND 345,000 USD
True
True
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...

چهار جدول بالا را می توان به صورت زیر ادامه داد.

Condition 1
Condition 2
Condition 1 AND Condition 2
False
False
False
False
True
False
True
False
False
True
True
True

همان طور که مشاهده می کنید عطف منطقی تنها زمانی به 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 در وهله ی اول درستی اولین شرط را ارزیابی می کند.

Type of House
A
Town House
False

در صورتی که شرط اول (یا هر یک از شروط) غلط باشد، کل شرط نادرست اطلاق می گردد ، صرفنظر از نتیجه ی شرط دوم. اگر شرط اول صحیح بود، شرط دوم ارزیابی می شود.

Type of House
Property Value
A
B
Single Family
655,000 USD
True
False

چنانچه شرط دوم نادرست بود، کل ترکیب غلط تلقی می گردد.

A
B
A && B
True
False
False

حین ارزیابی سه شرط بالا اگر شرط اول یا دوم ناصحیح باشد، به دلیل اینکه کل شرط نادرست محسوب می شود، دیگر دلیلی برای بررسی شرط سوم وجود ندارد. اگر هر دو شرط اول و دوم غلط باشند باز هم ارزیابی شرط سوم لزومی ندارد. فقط در صورت صحیح بودن دو شرط مذکور شرط سوم ارزیابی می شود.

Type of House
Property Value
Indoor Garage
A
B
C
Single Family
425,650 USD
None
True
True
False

ترکیبی از سه شرط بالا در عطف منطقی بدین صورت نمایش داده می شود : A && B && C. بار دیگر، چنانچه شرط سوم نادرست باشد، کل شرط غلط می شود.

A
B
A && B
C
A && B && C
True
True
True
False
False

مثال:

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...
A
B
C
A && B && C
False
Don't Care
Don't Care
Don't Care
True
False
Don't Care
Don't Care
True
True
False
False

کل شرط تنها زمانی صحیح (true) در نظر گرفته می شود که هر سه شرط درست باشند.

A
B
C
A && B && C
False
False
False
False
False
False
True
False
True
False
False
False
True
False
True
False
False
True
False
False
False
True
True
False
True
True
False
False
True
True
True
True
1404/01/20 8585 2467
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...