در این مقاله ی آموزشی، به آموزش دستور switch در جاوا می پردازیم و نکات مربوط به آن را به همراه کدهای مثال، توضیح می دهیم. 

با تودرتو قرار دادن یک سری دستور if و else، می توانیم از هر تعداد جایگزین، مواردی را انتخاب کنیم. بعنوان مثال، فرض کنید می خواهیم بسته به یک عدد ذخیره شده، سال کلاس دانش آموزان را نمایش دهیم. در تصویر 5.18 یک پیاده سازی از این برنامه را نشان داده ایم. 

(تصویر 5.18 : مشخص کردن وضعیت کلاس با استفاده از دستورات if تودرتو  )

برای مشاهده ی یک روش جایگزین برای این دستورات if تودرتو،  با استفاده از دستور switch، به تصویر 5.18 نگاه کنید. دستور switch وقتی مفید است که نیاز داشته باشیم یک متغیر تکی را دربرابر یک سری از اعداد صحیح( شامل نوع های int و byte و short) یا کاراکترها یا مقادیر رشته ای(string)، تست کنیم. ساختار دستور switch از چهار کلمه ی کلیدی استفاده می کند:

  1. کلمه ی switch : این کلمه ساختار را مشخص می کند و بلافاصله پس از آن، یک عبارت تست در داخل یک جفت پرانتز می آید.
  2. کلمه ی case : پس از این کلمه، یک مقدار امکان پذیر برای عبارت تست قرار می گیرد و پس از آن یک علامت دو نقطه(:) قرار می گیرد. 
  3. کلمه ی break : این کلمه به طور اختیاری به یک ساختار switch در انتهای هر case پایان می دهد. 
  4. کلمه ی default : اگر متغیر تست با هیچ یک از caseها تطابق نداشته باشد، کدهای این بخش اجرا می شود. 

تصویر 5.19 ساختار دستور switch را نشان می دهد که از آن برای نمایش سال های مدرسه استفاده می شود. 

(تصویر 5.19 : مشخص کردن کلاس مدرسه با استفاده از دستور switch )

استفاده از دستور switch در جاوا

شما مجبور نیستید مقادیر caseها را مانند تصویر 5.19، به صورت صعودی تنظیم کنید؛ اما اگر مانند تصویر 5.19 عمل کنید، اغلب درک دستورات ساده تر خواهد بود. از نظر منطقی، به جای اینکه کمترین مقدارِ case در ابتدا قرار گیرد، بهتر است که رایج ترین case در ابتدا قرار گیرد. 


ساختار switch که در تصویر 5.19 نشان داده شد، با ارزیابی متغیر year در این دستور آغاز می شود. اگر year برابر با اولین مقدارِ case که 1 است باشد، دستور switch مقدار Freshman را چاپ می کند، سپس دستور break بقیه ی ساختار switch را رها می کند و اجرای کدها پس از آکولاد بسته ی دستور switch ادامه می یابد. اگر متغیر year برابر با مقدار 1 از اولین case نباشد، مقدار case بعدی مورد مقایسه قرار می گیرد و همین طور الی آخر. اگر متغیر year با هیچ یک از مقادیر caseها برابر نباشد، دستورات درون بخش default اجرا می شود. 

ما می توانیم در ساختار دستور switch دستورات break را کنار بگذاریم و از آن استفاده نکنیم. اما اگر از دستور break استفاده نکنیم، و تطابقی برای این case پیدا شود، برنامه پایان نمی یابد و به سراغ case بعدی می رود. دوباره اگر case مذکور دستور break نداشته باشد، کدهای آن اجرا شده و به case بعدی رجوع می کند. 

حتما لازم نیست برای هر case کدنویسی کنیم. بعنوان مثال، فرض کنید که سرپرستِ(supervisor) دپارتمان 1 و 2 و 3 آقای Jones است اما دیگر دپارتمان ها سرپرست های متفاوتی دارند. در این صورت، ما باید از کدهای درون تصویر 5.20 استفاده کنیم:

(تصویر 5.20 : استفاده از دستورات case خالی)

آموزش case در جاوا

از طرف دیگر، ممکن است بخواهیم در یک ساختار switch از رشته ها استفاده کنیم تا مشخص کنیم نام یک سرپرست(supervisor) معتبر است یا نه. این موضوع در تصویر 5.21 نشان داده شده است.

(تصویر 5.21 : یک متد که از ساختار switch با مقادیر رشته ای استفاده می کند)

نکته: توانایی استفاده از رشته ها بعنوان مقادیر تست شونده در یک دستور switch در جاوا 7 یک ویژگی جدید محسوب می شود. 

وقتی چندین متغیر از نوع char باید بررسی شوند و می خواهید بزرگ یا کوچک بودن آنها را نادیده بگیرید، یک راه حل مفید این است که از دستورات case خالی استفاده کنیم، همان طور که در تصویر 5.22 نشان داده شده است.

(تصویر 5.22 : استفاده از یک ساختار switch برای نادیده گرفتن حروف در case)

نادیده گرفتن حروف در دستور switch در جاوا

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


دو عبارت صحیح و یک عبارت اشتباه

در مورد ساختار switch در زیر عبارات صحیح یا اشتباه را مشخص کنید:

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

2. دستور switch وقتی مفید است که نیاز داریم یک متغیر تکی را با یک سری مقادیر عددی صحیح یا کاراکترها تست کنیم. 

3. دستور break باعث می شود بقیه ی ساختار switch کنار گذاشته شود و کدهای پس از آکولاد بسته ی این دستور switch اجرا شوند. 

پاسخ: گزینه ی 1 اشتباه است. با استفاده از دستورات if و else تودرتو می توانیم هر تعداد جایگزین را که بخواهیم انتخاب کنیم. دستور switch تنها یک راه راحت برای بیان دستورات if و else تودرتو، وقتی که مقدار تست شده یک عدد صحیح یا یک کاراکتر است، می باشد.