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

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


مسعود درویشیان ۱۶ دیدگاه سی شارپ چهارشنبه, ۵ام مهر , ۱۳۹۱ 21486 بازدید

در قسمت قبل بحث در مورد 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 آشنا خواهیم شد.



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

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


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

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

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




  2. داوود
    ۶ مهر ۱۳۹۱

    در اینجا که نوشتید:
    ” اگر 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. مجتبی
    ۶ مهر ۱۳۹۱

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




  4. f.n
    ۹ مهر ۱۳۹۱

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




    • مسعود درویشیان
      ۱۱ مهر ۱۳۹۱

      سلام

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

      موفق باشید




  5. علی حیدرزاده
    ۱۰ مهر ۱۳۹۱

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




  6. سمیرا
    ۱۳ آبان ۱۳۹۱

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




  7. Praise
    ۲۰ آذر ۱۳۹۱

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




  8. علیرضا
    ۵ بهمن ۱۳۹۱

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




    • Aydin
      ۲۹ خرداد ۱۳۹۲

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




  9. ارام
    ۲۲ فروردین ۱۳۹۴

    سلام خسته نباشید.
    مرسی از این اموزش مفید…
    من تازه شروع به کار کردم من تو این نمونه نمیفهمم که (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
    ۳ مرداد ۱۳۹۴

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

    if (radiobutton1.enable=true)

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

    if (radiobutton2.enable=true)

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

    if (radiobutton3.enable=true)

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




  11. aboy
    ۱۹ تیر ۱۳۹۵

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



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





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

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

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

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

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



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

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