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

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


مسعود درویشیان ۳۱ دیدگاه سی شارپ پنج شنبه, ۴ام آبان , ۱۳۹۱ 33194 بازدید

در قسمت یازدهم با مثال‌های بیشتری در مورد حلقه‌ی 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 + " ");
        }
    }
}

خروجی:

۰ ۲ ۴ ۶ ۸ ۱۰

همان‌طور که می‌بینید این برنامه اعداد زوج ۰ تا ۱۰ نمایش می‌دهد. در این مثال هنگامی‌که 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 مربوطه اجرا می‌شود.

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



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

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


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


  1. میلاد
    ۵ آبان ۱۳۹۱

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

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




    • مسعود درویشیان
      ۵ آبان ۱۳۹۱

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




  2. مارال
    ۶ آبان ۱۳۹۱

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




    • مسعود درویشیان
      ۶ آبان ۱۳۹۱

      سلام

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

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




  3. تابناک
    ۹ آبان ۱۳۹۱

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

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




    • مسعود درویشیان
      ۱۰ آبان ۱۳۹۱

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




  4. فروزنده
    ۹ آبان ۱۳۹۱

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

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




    • مسعود درویشیان
      ۱۰ آبان ۱۳۹۱

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

      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. فرشید
    ۱۰ آبان ۱۳۹۱

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




  6. salah kurdetani
    ۱۱ آبان ۱۳۹۱

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

    ممنون




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

      سلام

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

      موفق باشید




      • salah kurdetani
        ۱۱ آبان ۱۳۹۱

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

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




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

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




          • salah kurdetani
            ۱۱ آبان ۱۳۹۱

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

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

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




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

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




  7. گلنوش
    ۱۱ آبان ۱۳۹۱

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




    • مسعود درویشیان
      ۱۱ آبان ۱۳۹۱
      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. داوود
    ۱۴ آبان ۱۳۹۱

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




  9. s0m4y3h
    ۱۶ آبان ۱۳۹۱

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




    • مسعود درویشیان
      ۱۷ آبان ۱۳۹۱

      سلام. این مساله‌ای که مد نظر شما هست از طریق حلقه‌های تودرتو انجام می‌شه که قرار هست فردا توی قسمت چهاردهم کامل در موردش صحبت کنیم. فردا قرار هست چندین تمرین داده بشه که من این مورد رو هم به‌عنوان 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. shahrokhdj
    ۲۹ مهر ۱۳۹۲

    سلام

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




  13. رضا
    ۱۸ آذر ۱۳۹۲

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




  14. امیراحمدادیبی
    ۱ اسفند ۱۳۹۲

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




  15. مجید اسلامی
    ۴ اسفند ۱۳۹۲

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




  16. سودابه
    ۲۸ خرداد ۱۳۹۳

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




  17. fateme
    ۱۷ آبان ۱۳۹۳

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




  18. مهتاب
    ۲۰ آذر ۱۳۹۳

    با سلام و تشکر به خاطر مطالب خوبتون
    اگه امکان داشته باشه یک مثال برای استفاده از ساختار switch برای متغیر های پیوسته بزنین.
    مثلا بین ۳تا ۵




  19. الهه علیزاده
    ۱۰ شهریور ۱۳۹۴

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

    elahe.alizadeh26@gmail.com

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




  20. پرنیان
    ۹ آذر ۱۳۹۴

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



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





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

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

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

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

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



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

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