دستور تعویض در JavaScript

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

این دستور زمانی مفید است که بخواهید مقدار یک متغیر را با چندین حالت مختلف مقایسه کنید و برای هر حالت کدی متفاوت اجرا کنید.

به طور کلی، استفاده از دستور switch به جای چندین شرط if-else، کد را خوانا تر و مرتب‌ تر می‌کند.

switch (expression) {
    case x:
        // یک بلوک کد
        break;
    case y:
        // یک بلوک کد
        break;
    default:
        // یک بلوک کد
}

switch چگونه عمل می کند:

  • switch ابتدا مقدار (expression) را ارزیابی می‌کند.
  • سپس مقدار ارزیابی‌ شده را به ترتیب با هر case مقایسه می‌کند.
  • اگر تطابقی پیدا شود، بلوک کد مربوط اجرا می‌شود.
  • اگر هیچ‌کدام از مقادیر case تطابق نداشته باشند، بلوک کد default (در صورت وجود) اجرا می‌شود.
switch (new Date().getDay()) {
    case 0:
        day = "یک شنبه";
        break;
    case 1:
        day = "دو شنبه";
        break;
    case 2:
        day = "سه شنبه";
        break;
    case 3:
        day = "چهار شنبه";
        break;
    case 4:
        day = "پنج شنبه";
        break;
    case 5:
        day = "جمعه";
        break;
    case 6:
        day = "شنبه";
}

نکته: متد ()getDay ایام هفته را به صورت عدد (از 0 تا 6) بر می گرداند. (یکشنبه = 0، دوشنبه = 1، ...)

کلمه ی کلیدی break

دستور break باعث می‌شود که از بلوک switch خارج شوید و مانع از اجرای حالت های دیگر شود.

نکته: اگر از break استفاده نکنید، اجرای کد به صورت پایین رو (Fall-through) ادامه پیدا می‌کند.

switch (color) {
    case "قرمز":
        text += "رنگ مورد علاقه من قرمز است. <br/>";
    case "آبی":
        text += "رنگ مورد علاقه من آبی است. <br/>";
    case "سبز":
        text += "رنگ مورد علاقه من سبز است. <br/>";
    default:
        text += "من رنگ مورد علاقه ندارم. <br/>";
}

نکته: نیازی به شکستن آخرین case در بلوک switch نیست. به هر حال switch در آنجا شکسته می شود (به پایان می رسد).

کلمه ی کلیدی default

کلمه ی کلیدی default کدی را به عنوان کد پیش فرض مشخص می کند تا در صورت عدم تطابق عبارات اجرا شود.

switch (new Date().getDay()) {
    case 5:
        text = "امروز جمعه است.";
        break;
    case 4:
        text = "امروز پنجشنبه است.";
        break;
    default:
        text = "در انتظار آخر هفته.";
}

نکته: حالت default لزوما در آخر بلوک کد switch قرار نمی گیرد.

switch (new Date().getDay()) {
    default:
        text = "در انتظار آخر هفته.";
        break;
    case 5:
        text = "امروز جمعه است.";
        break;
    case 4:
        text = "امروز پنجشنبه است.";
}

نکته: اگر default در انتهای بلوک switch نباشد و دستور break نداشته باشد، اجرای کد به صورت پایین رو (Fall-through) ادامه پیدا می‌کند.

بلوک کد های مشترک

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

با این کار، همه آن case ها یک بلوک کد را اجرا می کنند.

switch (new Date().getDay()) {
    case 2:
    case 3:
        text = "نزدیک آخر هفته";
        break;
    case 4:
    case 5:
        text = "آخر هفته";
        break;
    default:
        text = "در انتظار آخر هفته";
}

جزئیات switch

در ساختار switch، اگر چندین case با مقدار یکسان مطابقت داشته باشند، تنها اولین case که مطابقت دارد، اجرا می‌شود.

اگر هیچ case مطابقتی پیدا نکند، برنامه به حالت default را اجرا میکند.

اگر حالت default وجود نداشته باشد، برنامه ادامه دستورات پس از switch را اجرا میکند.

مقایسه دقیق

در ساختار switch، از مقایسه دقیق (strict comparison) با استفاده از عملگر (===) استفاده می‌شود. یعنی مقادیر علاوه بر برابری باید از همان نوع داده باشند تا مطابقت داشته باشند.

let x = "0";
switch (x) {
    case 0:
        text = "خاموش";
        break;
    case 1:
        text = "روشن";
        break;
    default:
        text = "مقداری پیدا نشد!";
}

نکته: یک مقایسه دقیق تنها زمانی درست است که عملوندها علاوه بر برابری، از یک نوع داده (data type) باشند.

 

خلاصه درس

تمرین


مشاهده پاسخ
توسعه دهندگان
احسان اسلامی