زنگ سی شارپ – قسمت هفتم

آشنایی کامل با دستور if، if های تو در تو و if های نردبانی


مسعود درویشیان 17 دیدگاه سی شارپ Wednesday, 26th September , 2012 38522 بازدید

در قسمت قبل بحث در مورد Program Control Statements بود و توضیحاتی در مورد این سرفصل و دستور if داده شد. در این قسمت به توضیحات تکمیلی‌تر این مبحث می‌پردازیم. همان‌طور که در قسمت ششم بیان شد، دستور if و if-else یکی از رایج‌ترین راه‌ها برای تصمیم گیری در سی شارپ هستند.

زنگ سی‌شارپ - قسمت هفتم

شما دستور if را برای یک تصمیم‌گیری به‌کار می‌برید. به‌عبارت دیگر، شما از دستور if برای اینکه مشخص کنید یک عمل اتفاق بیفتد یا خیر، استفاده می‌کنید. همچنین دانستید که در قسمت condition دستور if یک مقدار بولین قرار دارد که اگر true باشد statement اجرا می‌شود و اگر false باشد statement اجرا نخواهد شد. در بعضی از زبان‌های برنامه‌نویسی مثل ++C اعداد غیر صفر به‌عنوان true تلقی می‌شوند و عدد صفر بیان‌کننده‌ی مقدار false است. در سی شارپ تنها عبارت‌های بولی و مقایسه‌هایی که مقدار بولین را برمی‌گردانند برای نشان دادن مقدار true و false استفاده می‌شوند.

همان‌طور که در قسمت قبل گفته شد، هنگامی‌که چندین statement داشته باشید، باید آن‌ها را در یک بلاک قرار دهید. حتی اگر تنها یک statement هم داشته باشید می‌توانید آن را در یک بلاک قرار دهید. قرار دادن یک statement در بلاک، یک تکنیک مفید است که باعث جلوگیری از خطاهای احتمالی در آینده می‌شود زیرا اگر بخواهید بعداً در یک برنامه تغییراتی را اعمال کنید و برای مثال چندین statement را در یک دستور if اضافه کنید، این احتمال خیلی زیاد است که از براکت باز و بسته غافل شوید.

همچنین می‌توانید یک بلوک خالی داشته باشید که هیچ statement ای در آن نیست. این‌کار معمولاً زمانی‌که یک برنامه‌نویس شروع به نوشتن یک برنامه می‌کند و برای این‌که به خودش یادآوری کند بعداً statement را در بلاک قرار دهد، انجام می‌شود. بعضی از برنامه‌نویسان ترجیح می‌دهند براکت باز را برای بلوک‌ها در همان خطی قرار دهند که عبارت if هم قرار دارد (به‌جای این‌که براکت باز در یک خط جدا باشد). این سبک بلاک‌گذاری K&R نام دارد و این نام‌گذاری به احترام Brian Kernighan و Dennis Ritchie است که مخترعان زبان C هستند و اولین کتاب زبان برنامه‌نویسی C را نوشتند که در این کتاب بلاک‌گذاری آن‌ها به این سبک بود.

مثالی به سبک K&R:

static void Main()
{
    int i = 6;
    if (i < 8) {
        Console.WriteLine("A sample of K&R style...");
    }
    else {
        Console.WriteLine("A sample of K&R style...");
    }
}

(if های تو در تو)  Nested ifs

if تودرتو، if ای است که در قسمت statement یک if یا else دیگر قرار دارد.

به نمونه‌ی زیر دقت کنید:

using System;
class NestedIf
{
    static void Main()
    {
        int i = 6;

        if (i < 8)
        {
            if (i == 6)
            {
                Console.WriteLine("This is a nested if.");
            }
        }
    }
}

همان‌طور که می‌بینید، یک if در درون if دیگری واقع شده است. اگر if اول شامل مقدار true باشد، کامپایلر وارد بلاک آن شده که با if دیگری مواجه می‌شود. اگر if دوم هم شامل مقدار true باشد، استرینگ مربوطه نمایش داده می‌شود. در غیر این‌صورت هیچ خروجی چاپ نمی‌شود.

نکته اصلی که در مورد Nested ifs باید به‌خاطر بسپارید این است که، عبارت else همیشه مربوط به نزدیک‌ترین if بالای خودش است که هر دو آن‌ها در یک بلاک هستند.

به نمونه‌ی زیر دقت کنید:

if (i == 10)
{
 if (j < 20) a = b;
 if (k > 100) c = d;
 else a = c; // this else refers to if(k > 100)
}
else a = d; // this else refers to if(i == 10)

در مثال بالا، آخرین else مربوط به (if(j < 20 نیست به‌دلیل این‌که این‌ها در یک بلاک یکسان نیستند (هرچند که این نزدیک‌ترین if بدون else است). بلکه آخرین else مربوط به (if(i == 10 است. else داخلی مربوط به (if(k > 100 است زیرا این نزدیک‌ترین if به آن است و هر دوی آن‌ها در یک بلاک هستند.

The if-else-if Ladder

اگر شما به یک مقایسه‌ی پیچیده‌تر نیاز داشته باشید، می‌توانید چندین شرط را چک کنید. این روش که به روش نردبانی معروف است، یکی از رایج‌ترین روش‌ها در برنامه‌نویسی است و فرم کلی آن به‌شکل زیر است:

if(condition)
    statement;
else if(condition)
    statement;
else if(condition)
    statement;
.
.
.
else
    statement;

در این مدل، condition ها از بالا به پایین چک می‌شوند و به‌محض این‌که یک condition با مقدار true پیدا شد، statement مربوط به آن اجرا می‌شود و بقیه‌ی این ساختار نردبانی نادیده گرفته می‌شود. اگر هیچ‌یک از condition ها درست نبود، عبارت else پایانی اجرا می‌شود. else پایانی غالباً به‌عنوان condition پیش‌فرض عمل می‌کند و هرگاه که همه‌ی condition ها شامل مقدار false باشند، else پایانی اجرا می‌شود. اگر else پایانی را قرار ندهید و همه‌ی condition ها مقدار false داشته باشند، آنگاه هیچ اتفاقی نمی‌افتد.

به مثال جالب زیر توجه کنید:

//if−else-if structure
using System;
class ifElseIfLadder
{
    static void Main()
    {
        string fullname = "Webtarget";

        if (fullname == "Bill Gates")
        {
            Console.WriteLine("C# is pretty cool");
        }
        else if (fullname == "James Gosling")
        {
            Console.WriteLine("Java is pretty cool");
        }
        else
        {
            Console.WriteLine("Webtarget.Ir is pretty cool!");
        }
        //end if-else-if structure
    }
}

خروجی:

Webtarget.ir is pretty cool!

همان‌طور که می‌بینید، وب‌تارگت انتخاب شد زیرا Bill Gates و James Gosling شرایط لازم را نداشتند!

در قسمت بعد با دستور switch و حلقه‌ی for آشنا خواهیم شد.



نویسنده / مترجم : مسعود درویشیان

علاقه مند به موسیقی و برنامه نویسی بازی


17 دیدگاه برای این نوشته ثبت شده است

  1. سلام آقا مسعود

    خدا قوت،دستون درد نکنه انشاالله هرچی از خدا بخوای بهتون بده




  2. داوود
    27 September 2012

    در اینجا که نوشتید:
    ” اگر else پایانی را قرار ندهید و همه‌ی condition ها مقدار false داشته باشند، آنگاه هیچ اتفاقی نمی‌افتد.”
    و در اینجا طبق گفته شما:

    //if−else-if structure
    using System;
    class ifElseIfLadder
    {
        static void Main()
        {
            string fullname = "Webtarget";
     
            if (fullname == "Bill Gates")
            {
                Console.WriteLine("C# is pretty cool");
            }
            else if (fullname == "James Gosling")
            {
                Console.WriteLine("Java is pretty cool");
            }
            else
            {
                Console.WriteLine("Webtarget.Ir is pretty cool!");
            }
            //end if-else-if structure
        }
    }
    

    یعنی اگر ما else آخر را نذاریم ولی عبارتی که منجر به نمایش webtarget.ir می شود را بذاریم، بازهم هیچ اتفاقی نمی افتد؟ یا برنامه خطای نحوی از ما میگیرد؟



    • اگر else پایانی رو قرار ندید و همه‌ی condition ها مقدار false داشته باشند، هیچ‌یک از if و else-if های ساختار نردبانی اجرا نمیشه و در نتیجه کامپایلر به سراغ خط‌کدهای بعدی شما می‌ره تا بقیه‌ی برنامه رو اجرا کنه.
      به‌عنوان مثال اگه این‌طوری بنویسید:

      using System;
      class Example
      {
          static void Main()
          {
              string fullname = "Webtarget";
      
              if (fullname == "Bill Gates")
              {
                  Console.WriteLine("C# is pretty cool");
              }
              else if (fullname == "James Gosling")
              {
                  Console.WriteLine("Java is pretty cool");
              }
      
              Console.WriteLine("Webtarget.Ir is pretty cool!");
          }
      }
      

      در نتیجه هیچ‌یک از if و else-if های ساختار نردبانی اجرا نمیشه و کامپایلر به سراغ خط‌کد بعدی شما (که در این‌جا دستور چاپ یه string هست) می‌ره تا بقیه‌ی برنامه رو اجرا کنه.
      اگه این برنامه رو اجرا کنی می‌بینی که هیچ خطایی نمی‌گیره
      اگه بخوای یه شرط برای if داشته باشی که اگر اجرا نشد فقط یه حالت دیگه اتفاق بیفته دیگه لزومی نداره else-if بذاری و فقط از else استفاده می‌کنی




  3. مجتبی
    27 September 2012

    ممنون از شما
    دوستان من کتاب C# جان شارپ رو خوندم عالیه.
    توصیه می کنم. هر تیکه رو گفته چیه. آقای درویشیان شما هم تایید می کنید؟




  4. f.n
    30 September 2012

    با سلام به خاطر مطلب آموزشی مفیدتون ممنونم امیدوارم بتونیم بهره کافی رو از اطلاعات شما ببریم. یه درخواست کوچیک داشتم اگه یه خورده به مبحث آموزش سرعت بیشتری بدید ممنون می شم چون خیلی سی شارپ گستردست. من خیلی وقت بود منتظر قسمت هفتم بودم .
    یه سوالم دارم شما تا چه سطحی این آموزش رو ادامه می دید؟




    • مسعود درویشیان
      2 October 2012

      سلام

      مقالات آموزشی زنگ سی‌شارپ طبق استاندارد جهانی، همه‌ی سرفصل‌های اصلی رو در بر می‌گیره و همه‌ی مباحثی که برای یه برنامه‌نویس سی‌شارپ ضروری هست رو پوشش می‌ده. این مقاله‌ها هفته‌ای دو قسمت (یک‌شنبه و چهارشنبه) پخش می‌شه که در حال حاضر همین زمان‌بندی مناسب هست.

      موفق باشید




  5. علی حیدرزاده
    1 October 2012

    دیریست که دلدار پیامی نفرستاد
    ننوشت کلامی و سلامی نفرستاد




  6. سمیرا
    3 November 2012

    ممنون
    مثل همیشه عالی بود
    خسته نباشید




  7. Praise
    10 December 2012

    یعنی پوکیدم از اون “مثال جالب” آخرتون ! :))))
    مرسی !




  8. علیرضا
    24 January 2013

    تو اموزش های قبل یاد دادین ک میتونیم ورودی دریافت کنیم !حالا میشه یه مثال مقایسه دو عدد دریافتی بزنید ؟اخه هر کاری کردم درست کنم خطا میداد!!!!؟لطفا کمکم کنید




    • Aydin
      19 June 2013

      باقی قسمت ها را مطالعه نکردم که بدونم به جواب رسیدید یا نه اما …
      string i ;
      string f ;
      i = Console.ReadLine();
      f = Console.ReadLine();
      float res = int.Parse(i) / float.Parse(f);
      Console.WriteLine(res);
      Console.ReadLine();




  9. ارام
    11 April 2015

    سلام خسته نباشید.
    مرسی از این اموزش مفید…
    من تازه شروع به کار کردم من تو این نمونه نمیفهمم که (if -else)چطور عمل می کنن میشه یخورده توضیح بدید؟

    Console.WriteLine(“Please Enter three number”);

    int n1 = int.Parse(Console.ReadLine());
    int n2 = int.Parse(Console.ReadLine());
    int n3 = int.Parse(Console.ReadLine());

    Console.Write(“min = “);
    if (n1 < n2)
    if (n1 < n3)
    Console.WriteLine(n1);

    else if (n2 < n3)
    Console.WriteLine(n2);
    else Console.WriteLine(n3);
    Console.WriteLine();




  10. abbas
    25 July 2015

    با سلام به اساتید
    اگه بخواهیم با 3 تا دکمه رادیویی (radio button) شرط بزاریم که اگر هر کدام فعال بود یک عمل انجام بشه من این کد رو نوشتم ولی جواب نمیده میشه بگید مشکل کجاست:

    if (radiobutton1.enable=true)

    انجام عملیات اول

    if (radiobutton2.enable=true)

    انجام عملیات دوم

    if (radiobutton3.enable=true)

    انجام عملیات سوم




  11. aboy
    9 July 2016

    باتشکر فراوان از شما یک سوال داشتم
    alt+f5رو فشار میدم تا بر نامه اجرا بشه اجرا میکنه ولی بلا فاصله بعد از تموم شدن کارش صفحرو میبنده با این که قبلا یک متن مینوشت تا با زدن یک دکمه ببنده صفحه رو اگه میشه کمک کنید که درستش کنم.
    ممنون از سایت خوب تون.




  12. محسین کریمی
    10 November 2017

    سلام می خام در باره ای کتاب زبان برنامه نویسی پرسم کسی هست بدونه که از همه کتاب برنامه نویسی سی شارپ به درجه ای عالیش نوشته



دیدگاه خود را بنویسید





نشانی ایمیل شما منتشر نخواهد شد.

کامنت های شما بعد از تأیید توسط نویسنده وبلاگ، منتشر خواهند شد.

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

شما میتوانید با مراجعه به سایت گراواتار یک آواتار اختصاصی برای خود تعریف کنید، تا در کنار نام شما نمایش داده شود

برای قرار دادن کدهای نمونه می توانید از تگ های [php] ، [html] ، [css] و [js] استفاده کنید.
به عنوان مثال کدهای php را می توان به صورت زیر قرار داد:
[php] var $whoLoveIranians = "WebTarget!"; [/php]



کلیه حقوق مادی و معنوی برای وب سایت وب تارگت محفوظ است ©2024 وب‌تارگت

استفاده از مطالب وب سایت در سایر وب سایت‌ها و نشریات چاپی با ذکر منبع آزاد است.