آموزشگاه برنامه نویسی تحلیل داده
آموزشگاه برنامه نویسی تحلیل داده

عملگر ?: (?: Operator) در سی شارپ

دوره های مرتبط با این مقاله

عملگرهایی هستند که به صورت کوتاه شده به جای if...else می توانند عمل کنند. چنانچه هر بلوک دستور if...else ما تنها شامل یک دستور اجرایی باشد، می توان از این روش به جای آن استفاده کرد.

آموزش سی شارپ-جایگزین if...else عملگر سه تایی (?:)

چنانچه شرطی دارید که ابتدا به عنوان if بررسی شود در غیر این صورت به عنوان else (اگر if غلط بود و اجرا نشد، else یا دستور دوم اجرا شد)، می توان از عملگر سه تایی استفاده کرد که ترکیبی از" ? " و " : " می باشد. شکل کلی این دستور به صورت زیر می باشد

Condition ? Statement1 : Statement2;

کامپایلر ابتدا Condition را چک می کند. اگر Condition درست بود Statement1 اجرا می شود، در غیر این صورت Statement2 اجرا می شود. برنامه ی زیر با استفاده از عملگر شرطی دو عدد را باهم مقایسه کرده و عدد بزرگ تر را مشخص می کند.

آموزش سی شارپ-جایگزین if...else مثال:

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

آموزش سی شارپ-جایگزین if...else عملگر " ?? "

کامپایلر ابتدا Condition را چک می کند. اگر Condition درست بود Statement1 اجرا می شود، در غیر این صورت Statement2 اجرا می شود. برنامه ی زیر با استفاده از عملگر شرطی دو عدد را باهم مقایسه کرده و عدد بزرگ تر را مشخص می کند.

آموزش سی شارپ-جایگزین if...else مثال:

                
using System;
public class Exercise
‎{
‎    public static int Main()
‎    {
‎        double? distance = null;
‎        Console.WriteLine();
‎        return 0;
‎    }
‎}‎‏

ممکن است لازم شود مقدار چنین متغیری را به متغیر دیگری تخصیص دهید. چنانچه مقدار متغیر null باشد (به این معنا که مقداری نداشته باشد یا مقدار آن تهی باشد)، دیگر تخصیص آن به متغیر دیگر بی معنا خواهد بود. بنابراین، ابتدا باید بررسی شود که مقدار متغیر مزبور، مقداری تهی است یا مقدار واقعی. به عبارت دیگر از compiler درخواست بررسی متغیر را می کنید تا مشخص شود مقدار آن مقداری تهی است یا مقداری واقعی. در صورتی که متغیر مقداری حقیقی دارد، نه تهی، می توان مقدار آن را به متغیر جدید تخصیص داد چنانچه متغیر تهی (null) بود، مقداری جایگزین به متغیر نام برده اختصاص می دهید برای پشتیبانی از این امکان، زبان C# عملگر "??" را در اختیار شما قرار می دهد. فرمول آن به ترتیب زیر است.

TargetVariable = OriginalVariable ?? AlternateValue;

در وهله ی اول لازم است OriginalVariable را تعریف کرده و این متغیر باید قادر به نگه داشتن مقدار تهی باشد که از طریق افزودن عملگر ? به آن امکان پذیر می شود. توجه داشته باشید که هم می توان TargetVariable را پیش از مقداردهی اولیه تعریف کرد و هم حین مقداردهی آن. لازم به ذکر است که هر دو متغیر باید سازگار با هم باشند. مثال ذیل عملگر ?? را به کار می برد.

آموزش سی شارپ-جایگزین if...else مثال:

                
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 در حال حاضر مقداری تهی دارد، مقدار 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...else if و if...else

در صورت استفاده از دستور شرطی if...else، می توان تنها دو دستور را پردازش کرد. در برخی موارد، لازم است چندین (بیش ازدو) دستور را پردازش یا اجرا کنیم. برای این منظور می توان از شرط if...else if استفاده کرد. فرمول آن به ترتیب زیر می باشد.

if(Condition 1) Statement 1;
else if(Condition 2) Statement 2

کامپایلر ابتدا Condition1 را بررسی می کند. در صورت صحیح (true) بودن Condition1، 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 جایگزین در نظر می گیرد. فرمول آن به شرح زیر است.

جایگزین کردن دستور 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، Statement1 اجرا می شود. چنانچه Condition2 صحیح باشد، Statement2 اجرا می شود. زمانی که کامپایلر Condition-n را به true تفسیر کند، دستور همخوان (مربوطه ی) آن اجرا می شود. حال اگر Condition-n غلط باشد، کامپایلر شرط بعدی را بررسی می کند. به عبارت دیگر، می توان با استفاده از دستور else if هر تعداد شرط که لازم است شامل کرد. اگر پس از بررسی جمیع شرایط احتمالی، باز هم فکر می کنید ممکن است شرطی غیر منتظره وجود داشته باشد، می توانید از 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...

  • 11817
  •    2182
  • تاریخ ارسال :   1394/07/27

دانلود PDF دانلود سورس کد دانلود فیلم آموزشی دانشجویان گرامی اگر این مطلب برای شما مفید بود لطفا ما را در GooglePlus محبوب کنید
رمز عبور: tahlildadeh.com یا www.tahlildadeh.com
عملگر ?: (?: Operator) در سی شارپ
ارسال دیدگاه نظرات کاربران
شماره موبایل دیدگاه
عنوان پست الکترونیک

ارسال

آموزشگاه برنامه نویسی تحلیل داده
آموزشگاه برنامه نویسی تحلیل داده

تمامی حقوق این سایت متعلق به آموزشگاه تحلیل داده می باشد .