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

آشنایی با دستور switch، توضیح break و continue از بخش Jump Statements


مسعود درویشیان 32 دیدگاه سی شارپ Thursday, 25th October , 2012 53022 بازدید

در قسمت یازدهم با مثال‌های بیشتری در مورد حلقه‌ی while آشنا شدید همچنین حلقه‌ی do-while توضیح داده شد. در این قسمت با دستور switch و چند نکته‌ی دیگر در مورد حلقه‌ها (break و continue از بخش Jump Statements) آشنا می‌شویم.

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

استفاده از break برای خارج شدن از حلقه

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

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

using System;
class Example
{
    static void Main()
    {
        // Use break to exit this loop.
        for (int i = -10; i <= 10; i++)
        {
            if (i > 0) break; // terminate loop when i is positive
            Console.Write(i + " ");
        }
        Console.WriteLine("Done");
    }
}

خروجی:

همان‌طور که مشاهده می‌کنید، حلقه طوری طراحی شده که باید از ۱۰- تا ۱۰ را نمایش دهد ولی با استفاده از کلمه break، حلقه در زمانی که i مثبت می‌شود به پایان می‌رسد.

مثالی دیگر از break:

using System;
class Example
{
    static void Main()
    {
        int x = 0;
        while (true)
        {
            if (x++ > 5)
                break; // break from the loop
        }
        // execution continues here after break...
    }
}

نکته‌ي قابل توجه در این برنامه، حلقه‌ی (while(true است. در این حلقه پیوسته شرط حلقه (condition) برقرار است (برابر با true است) و این حلقه تا بی‌نهایت اجرا می‌شود ولی با توجه به برنامه ما، دستور if درون حلقه مانع از اجرای بی‌نهایت حلقه شده و پس از این‌که ++x بزرگ‌تر از ۵ بود برنامه از حلقه خارج می‌شود.

بنابراین حلقه‌ی بی‌نهایت while این‌گونه است:

while (true)
{
    // This is an infinite while loop
}

در حلقه‌ی for تمام قسمت‌ها اختیاری هستند و شما می‌توانید با خالی گذاشتن آن قسمت‌ها یک حلقه‌ی بی‌نهایت به‌وجود آورید (توجه داشته باشید که گذاشتن سمی‌کالن‌ها در حلقه‌ی for اجباری است):

for (; ; )
{
    // this is an infinite for loop
}

در واقع حلقه‌های بی‌نهایت تا بی‌نهایت اجرا نمی‌شوند چراکه تمام برنامه‌ها با کمک سخت‌افزار و حافظه‌ی کامپیوتری اجرا می‌شوند که هر دوی آن‌ها ظرفیت محدودی دارند. اگر یک حلقه‌ی بی‌نهایت را اجرا کردید برای متوقف کردن آن کافی است کلید Ctrl و C را هم‌زمان بگیرید.

استفاده از continue

شما می‌توانید در بدنه‌ی حلقه از کلمه‌کلیدی continue استفاده کنید. با این‌کار حلقه وادار می‌شود عملیات تکرار بعدی را انجام دهد و مابقی کد را نادیده بگیرد.

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

using System;
class Example
{
    static void Main()
    {
        for (int i = 0; i <= 10; i++)
        {
            if (i % 2 != 0)
                continue;
            Console.Write(i + " ");
        }
    }
}

خروجی:

0 2 4 6 8 10

همان‌طور که می‌بینید این برنامه اعداد زوج ۰ تا ۱۰ نمایش می‌دهد. در این مثال هنگامی‌که i عددی فرد است، برنامه توسط کلمه continue به تکرار بعدی حلقه می‌پردازد و مقدار i را نمایش نمی‌دهد.

به فلوچارت برنامه بالا دقت کنید:

همان‌طور که در فلوچارت و خط‌کد برنامه مشخص است، اگر شرط if درون حلقه برقرار باشد، دستور continue اجرا شده و برنامه به ابتدای حلقه باز می‌گردد. در حلقه‌های while و do-while کلمه‌ی continue موجب می‌شود برنامه مستقیماً به قسمت condition حلقه برود و مجدداً حلقه را اجرا کند.

The switch statement

اگر به‌خاطر داشته باشید بیان شد که سه دسته‌بندی برای Program Control Statement وجود دارد. در دسته‌بندی Selection Statements دستورهای if و switch بودند. همچنین دانستید که توسط روش نردبانی می‌توانید چندین شرط را چک کنید. برای مثال، تصور کنید که می‌خواهید با توجه به مقدار سال تحصیلی، اسم یک دانش‌آموز را نمایش دهید. توسط روش نردبانی از این روش استفاده می‌کردیم:

using System;
class Example
{
    static void Main()
    {
        int year = 3;

        if (year == 1)
            Console.WriteLine("Freshman");
        else if (year == 2)
            Console.WriteLine("Sophomore");
        else if (year == 3)
            Console.WriteLine("Junior");
        else if (year == 4)
            Console.WriteLine("Senior");
        else
            Console.WriteLine("Invalid year");
    }
}

این مثال را نیز از طریق if های تودرتو (Nested ifs) می‌توانید انجام دهید. راه دیگر برای حل این‌گونه مسائل استفاده از دستور switch است. دستور switch یک متغیر را با چندین مورد مقایسه می‌کند و آن مورد را که با متغیر مطابقت دارد، انتخاب می‌کند. ساختار دستور switch از if های تودرتو و روش نردبانی ساده‌تر و خواناتر است. در دو روش (تودرتو و نردبانی) قبلی هنگامی‌که چندین شرط را پی‌در‌پی بررسی می‌کنیم، خواندن کدها سخت‌تر شده و امکان به‌وجود آمدن خطا بیشتر می‌شود در حالی‌که ساختار switch در این موارد ساده و خواناتر است. ساختار کلی دستور switch به شکل زیر است:

switch(expression)
{
    case constant1:
        statement sequence
        break;
    case constant2:
        statement sequence
        break;
    case constant3:
        statement sequence
        break;
.
.
.
    default:
        statement sequence
        break;
}

قسمت expression باید یا integer type (مثل int, short, byte, char) یا string type باشد. بنابراین در این‌جا عبارات floating-point برای استفاده مجاز نیستند. غالباً expression، کنترل‌کننده‌ی switch، یک متغیر است. بعد از کلمه‌‌کلیدی case یک مقدار ثابت (constant) قرار می‌گیرد که حتماً باید هم‌نوع expression باشد. هیچ دو case ای در یک switch نباید constant یکسان داشته باشند.  کلمه‌کلیدی break در پایان هر case قرار دارد و برای پایان دادن به ساختار switch استفاده می‌شود. استفاده از کلمه‌کلیدی default اختیاری است. اگر مطابقت با expression در case ها یافت شد، کدهای قسمت همان case تا رسیدن به break اجرا می‌شود ولی اگر مقدار هیچ case ای با expression مطابقت نداشت، قسمت default اجرا می‌شود. اگر از default استفاده نکردید، هنگامی‌که هیچ تطابقی یافت نشد، هیچ اتفاقی نیز نخواهد افتاد.

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

using System;
class Example
{
    static void Main()
    {
        int year = 3;

        switch (year)
        {
            case 1:
                Console.WriteLine("Freshman");
                break;
            case 2:
                Console.WriteLine("Sophomore");
                break;
            case 3:
                Console.WriteLine("Junior");
                break;
            case 4:
                Console.WriteLine("Senior");
                break;
            default:
                Console.WriteLine("Invalid year");
                break;
        }
    }
}

همان‌طور که می‌بینید خروجی این برنامه Junior است، مقدار متغیر year با case های مختلف مقایسه می‌شود و در صورت تطابق، case مربوطه اجرا می‌شود.

برای توضیحات تکمیلی، مثال‌های بیشتر و تمرین قسمت‌های بعدی زنگ سی‌شارپ را دنبال کنید.



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

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


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


  1. میلاد
    26 October 2012

    با سلام
    مهندس جان بازم هم ممنون و متشکرم بابت زحمتی که کشیدین بی صبرانه منتظر مطالب بعدی شما هستم.

    حلقه بی نهایت بیشتر توی چه برنامه هایی خودشو نشون میده؟کاربردش چیه؟




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

      سلام. از حلقه‌ی بی‌نهایت برای قسمتی از برنامه که قصد داریم اجراش متوقف نشه استفاده می‌کنیم. حالا توی قسمت‌های آینده مثال‌های زیادی در این مورد هست که کاملاً متوجه می‌شید :)




  2. مارال
    27 October 2012

    با سلام ،آقای مهندس واقعا نمیدانم چطور از شماوهمکارانتان تشکر کنم .؟
    من 46 سالمه و زمانی با برنامه نویسی آشنا شدم که اصلا pc وجود نداشت(عصر کارتهای پانچی و2واحدزبان فرتن)!بعد از این همه سال با توجه به علاقه به برنامه نویسی وبطور اتفاقی
    با “وب تارگت”آشنا شدم .برای من فسیل شده هم مطا لب مفید بود! منتظر قسمت 13 به بعد هستم.
    امیدوارم همواره موفق وپیروز باشید.




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

      سلام

      باعث افتخار ماست که خواننده‌های خوبی مثل شما و بقیه‌ی عزیزان داریم. امیدوارم با توجه به زحماتی که تیم وب‌تارگت می‌کشه مطالب ارائه شده برای شما و بقیه دوستان مفید واقع بشه و بهره کافی رو ببرید.

      به امید موفقیت روز افزون شما و بقیه عزیزان




  3. تابناک
    30 October 2012

    سلام آقای درویشیان ، ممنون بابت زحماتی که میکشین!

    آقای سروری گفته بودن که هفته ای ۳ قسمت از آموزش س شارپ رو میذارین، ولی‌ خیلی‌ وقت که هفته ای ۱ قسمت میذارین،‌ای کاش زود به زود آموزش هارو آپ کنین :( ممنون میشم، آخه خیلی‌ نیاز دارم که سریعتر اینارو یاد بگیرم . . .
    با تشکر




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

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




  4. فروزنده
    30 October 2012

    سلام استاد
    واقعا خسته نباشید خیلی استفاده بردم.
    میشه یه دستور ساده بنویسید که با استفاده از switch
    که اگر اعداد وارد شده در تکست باکس از یک تا 5 بود به وسیله یک کادرپیغام نشون بده؟

    موفق و پاینده باشید.




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

      حالت کلی‌ چیزی که می‌خواید توی کنسول به این شکل می‌شه:

      Console.Write("Please enter a number between 1 and 5: ");
      string input = Console.ReadLine();
      switch (input)
      {
          case "1":
              Console.WriteLine(input + " is picked out");
              break;
          case "2":
              Console.WriteLine(input + " is picked out");
              break;
          case "3":
              Console.WriteLine(input + " is picked out");
              break;
          case "4":
              Console.WriteLine(input + " is picked out");
              break;
          case "5":
              Console.WriteLine(input + " is picked out");
              break;
          default:
              Console.WriteLine("Invalid Input!");
              break;
      }
      

      اگه منظورتون از کادر پیغام، کادر پیغام توی web application هست که میشه از طریق جاوا اسکریپت (دستور alert) این‌کارو انجام داد. اگه منظورتون alert توی windows application هست می‌تویند این لینک و این لینک رو ببینید.




  5. فرشید
    31 October 2012

    من هم در عین اینکه خیلی تشکر میکنم با جناب تابناک موافقم.




  6. salah kurdetani
    1 November 2012

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

    ممنون




    • مسعود درویشیان
      1 November 2012

      سلام

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

      موفق باشید




      • salah kurdetani
        1 November 2012

        خیلی ممنون واقعا راه درست اینه . . !! آقا من از الآن قول مردونه میدم سی شارپو تو کنسول کار کنم تا راه بیفتم ، و همه مطالب شما را + کتابهای دیگر طی می کنم.

        یه درخواست دیگه : اگه میشه واسه خود سی پلاس هم راهنمایی ایی کامل کنید خیلی ممنون میشم ؟؟
        زیاد(یعنی یه سال) با سی پلاس کار کردم و برنامه نویسیم خوب نیست چکار کنم، به رتبه های بالاتری دست پیدا کنم ؟؟




        • مسعود درویشیان
          1 November 2012

          خوب وقتی با سی‌شارپ کار کنید دیگه عملاً نیازی به سی‌پلاس‌پلاس ندارید.
          اما برای سی‌پلاس‌پلاس هم همین روشی که خدمدتون عرض کردم رو باید انجام بدید.




          • salah kurdetani
            1 November 2012

            آقا از امروز به شاگردی قبولمان کن .

            و امیدوارم بتونم به قولم عمل کنم .

            خیلی خیلی ممنون .




          • مسعود درویشیان
            1 November 2012

            امیدوارم شاهد موفقیت‌تون باشیم.
            Happy Coding…




  7. گلنوش
    1 November 2012

    سلام استاد امکانش هست برنامه ی قدر مطلق رو با سوییچ برام بنویسید؟




    • مسعود درویشیان
      1 November 2012
      using System;
      class Example
      {
          static void Main()
          {
              Console.Write("Please Enter your number: ");
              int number = Convert.ToInt32(Console.ReadLine());
              bool result;
      
              if(number > 0)
                  result = true;
              else
                  result = false;
      
              switch (result)
              {
                  case true:
                      Console.WriteLine("Absolute value of your number: " + number);
                      break;
                  case false:
                      Console.WriteLine("Absolute value of your number: " + (-number));
                      break;
              }
          }
      }
      

      ولی خوب چه کاریه! توی همون if و else قدر مطلق رو حساب می‌کنید دیگه :)




  8. داوود
    4 November 2012

    سلام آقا مسعود؛ بازهم ممنونم از آموزشهای خوبتون؛ دستتون درد نکنه! فقط مسعود جان برای اطلاع خودتون میگم؛ لینکهای بالا کار نمیکنه ها؛ منظورم لینکهایی هستش که تو متن توضیحات گذاشتید مثل این:
    “بخش Jump Statements”




  9. s0m4y3h
    6 November 2012

    سلام لطف ميكنيد درباره نحوه ساخت جدول ضرب در كنسول ويندوز سي شارپ كمك كنيد و برنامه بايد طوري باشه كه كاربرتعداد چدول ضرب رو تعيين كنه فقط راهنمايي درباره نحوه گرفتن عدد از كاربر براي تعيين تعداد سطر وسطون هاي جدول ضرب ممنونم بابت سايت جالب و مفيدتون




    • مسعود درویشیان
      7 November 2012

      سلام. این مساله‌ای که مد نظر شما هست از طریق حلقه‌های تودرتو انجام می‌شه که قرار هست فردا توی قسمت چهاردهم کامل در موردش صحبت کنیم. فردا قرار هست چندین تمرین داده بشه که من این مورد رو هم به‌عنوان homework برای تمرین قرار می‌دم. حل تمرین‌ها هم توی قسمت بعدش قرار داده می‌شه
      اگه حل تمرین رو همین الان لازم دارید تا توضیح بدم؟



  10. ممنونم مسعود جان.
    در مورد قسمت اختیاری (default) در switch یه نکته برام جالبه که در PHP میتونی برای این قسمت اون break رو نذاری ولی اینجا الزامی هست.
    من برای تست نوع های دیگه دادم و حق با شما بود اما عبارتی که کامپایلر بعنوان خطا بر میگردونه این عبارت هست:
    A switch expression or case label must be a bool, char, string, integral, enum, or corresponding nullable type

    برای دوستان ترجمه میکنم که بدردشون میخوره. عبارت شرطی و عبارت روبروی case باید یکی از نوع های bool، char، string، integral/عدد صحیح یا بدون کسر، enum یا هر نوعی که میتونه به خودش مقدار null بگیره داشته باشه.
    ممکنه سوال کنید nullable یعنی چی؟ نوع هایی که میتونن غیر از مقادیر خودشون مثل bool که true و false هست، مقدار null هم بگیره. این برای کار با دیتابیس کارایی داره.




  11. کوثر
    12 September 2013

    خیلی خوب بود ممنون




  12. shahrokhdj
    21 October 2013

    سلام

    میشه یکمی بیشتر در مورد continue صحبت بشه؟




  13. رضا
    9 December 2013

    بسیار سپاسگزارم خیلی خوب بود .




  14. امیراحمدادیبی
    20 February 2014

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




  15. مجید اسلامی
    23 February 2014

    با سلام و تشکر بابت سایت خوبتون
    من این قسمت رو متوجه نمیشم، اگه میشه از قسمت ایف، خط به خط تِریس بفرمایید
    using System;
    class Example
    {
    static void Main()
    {
    for (int i = 0; i <= 10; i++)
    {
    if (i % 2 != 0)
    continue;
    Console.Write(i + " ");
    }
    }
    }




  16. سودابه
    18 June 2014

    baba damet garm!!!!!!!!!!




  17. fateme
    8 November 2014

    سلام
    من سعی میکنم این زبانو یاد بگیرم اما یه سری چیزا واسم نامفهونه شاید چیزای خیلی ساده ای باشه مثل استرینگ و این چیزا نمیدونم چیکار کنم




  18. مهتاب
    11 December 2014

    با سلام و تشكر به خاطر مطالب خوبتون
    اگه امكان داشته باشه يك مثال براي استفاده از ساختار switch براي متغير هاي پيوسته بزنين.
    مثلا بين 3تا 5




  19. الهه علیزاده
    1 September 2015

    چطوری میتونیم علامن بین را در دستور سویچ بنویسیم.لطفا اگر میشه به جیمیلم ارسال کنید.

    [email protected]

    مثل توی ifمیخوام تو سویچم ببینم.
    if(mark<5)&&(mark<20);
    {
    console.writeline(good);
    }




  20. پرنیان
    30 November 2015

    سلام
    خدا قوت میگم بهتون دوست عزیز واقعا سایت بدرد بخور و جامعی دارین
    می خاستم ببینم چطوری یمشه کل اموزشو مثلا سی شارپو یکجا داشته باشم ؟ دانلودی که گذاشتین تک قسمتین؟؟




  21. maedeh
    15 November 2018

    سلام خسته نباشید استاد ببخشید یه سوال داشتم می خواستم ببینم اگر بخواییم مضرب های عدد 3 رو توی حلقه ی forبنویسیم چطوری باید بنویسیم یعنی مثلا نوشتن برنامه ای با استفاده از forکه مضرب های عدد 3 بین 100 تا 200رو نشون بده.
    خیلی ممنون میشم اگر کمکم کنید.



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





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

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

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

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

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



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

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