دستور switch و عملگر سه‌گانه

هدف‌های آموزشی

در پایان این مرحله، دانش‌آموز باید بتواند:

  1. دستور switch را برای بررسی چند حالت مشخص به کار ببرد.
  2. تفاوت switch و elseif را توضیح دهد.
  3. نقش break را در switch بیان کند.
  4. عملگر سه‌گانه را در حالت‌های ساده استفاده کند.

۱. دستور switch چیست؟

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

ساختار:

<?php
switch (متغیر) {
    case مقدار اول:
        // دستورها
        break;
    case مقدار دوم:
        // دستورها
        break;
    default:
        // دستورهای حالت پیش‌فرض
        break;
}
?>

نکته‌ها:

  1. مقدار متغیر داخل پرانتز switch نوشته می‌شود.
  2. هر حالت با case و یک مقدار مشخص شروع می‌شود.
  3. پس از هر case معمولاً از break; استفاده می‌شود.
  4. بخش default برای حالتی است که هیچ‌کدام از مقدارها مطابقت نداشته باشند.
  5. default الزامی نیست، اما در بیشتر موارد مفید است.

۲. مثال ساده: نام روز هفته

<?php
$day = 3;

switch ($day) {
    case 1:
        echo "شنبه";
        break;
    case 2:
        echo "یکشنبه";
        break;
    case 3:
        echo "دوشنبه";
        break;
    case 4:
        echo "سه‌شنبه";
        break;
    case 5:
        echo "چهارشنبه";
        break;
    case 6:
        echo "پنجشنبه";
        break;
    case 7:
        echo "جمعه";
        break;
    default:
        echo "روز نامعتبر";
        break;
}
?>

توضیح:

  • مقدار متغیر $day برابر ۳ است.
  • switch مقدار متغیر را با هر case مقایسه می‌کند.
  • مقدار ۳ با case 3 مطابقت دارد.
  • پیام «دوشنبه» نمایش داده می‌شود.
  • دستور break; باعث می‌شود اجرای switch متوقف شود.

۳. نقش break

اگر break; نوشته نشود، پس از اجرای یک case، برنامه به بررسی و اجرای caseهای بعدی نیز ادامه می‌دهد. به این رفتار «ریزش» یا fall-through می‌گویند. در بیشتر موارد این رفتار ناخواسته است.

مثال نادرست:

<?php
$day = 3;

switch ($day) {
    case 1:
        echo "شنبه";
    case 2:
        echo "یکشنبه";
    case 3:
        echo "دوشنبه";
    case 4:
        echo "سه‌شنبه";
}
?>

در این مثال، چون break نوشته نشده است، پس از مطابقت با case 3، دستورهای case 4 نیز اجرا می‌شوند. بنابراین خروجی «دوشنبهسه‌شنبه» خواهد بود که نادرست است.

مطالعه تکمیلی

در برخی مسائل، ریزش عمدی caseها مفید است. برای مثال، چند مقدار مختلف باید یک دستور مشترک را اجرا کنند. این کار برای دانش‌آموزان کاردانش الزامی نیست، اما یک نمونه ساده نشان می‌دهیم:

<?php
$grade = "A";

switch ($grade) {
    case "A":
    case "B":
        echo "قبول با نمره خوب";
        break;
    case "C":
        echo "قبول";
        break;
    default:
        echo "رد";
        break;
}
?>

در این مثال، اگر مقدار $grade برابر "A" یا "B" باشد، یک پیام مشترک نمایش داده می‌شود.

۴. مقایسه switch و elseif

ویژگی switch elseif
مناسب برای مقایسه یک متغیر با چند مقدار مشخص بررسی شرط‌های مختلف و پیچیده
خوانایی در حالت‌های زیاد بهتر است در شرط‌های منطقی مناسب‌تر است
انعطاف کم‌تر بیش‌تر
مثال نام روز هفته بررسی بازه نمره

نکته: برای بررسی بازه‌ها، مانند $score >= 10، از elseif استفاده کنید. switch برای مقایسه با مقدارهای مشخص مناسب است.

۵. عملگر سه‌گانه

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

شرط ? مقدار در حالت درست : مقدار در حالت نادرست

مثال:

<?php
$age = 20;
$message = ($age >= 18) ? "بزرگسال" : "نوجوان";
echo $message;
?>

توضیح:

  • شرط $age >= 18 بررسی می‌شود.
  • اگر شرط درست باشد، مقدار "بزرگسال" انتخاب می‌شود.
  • اگر شرط نادرست باشد، مقدار "نوجوان" انتخاب می‌شود.
  • نتیجه در متغیر $message ذخیره می‌شود.

معادل همان کد با if و else:

<?php
$age = 20;

if ($age >= 18) {
    $message = "بزرگسال";
} else {
    $message = "نوجوان";
}

echo $message;
?>

نکته: عملگر سه‌گانه برای شرط‌های ساده و کوتاه مناسب است. برای شرط‌های پیچیده یا چندحالته، استفاده از if و else خوانایی بیشتری دارد.

مطالعه تکمیلی

عملگر سه‌گانه را می‌توان به صورت تودرتو نیز نوشت. اما این کار خوانایی کد را کم می‌کند و برای دانش‌آموزان کاردانش توصیه نمی‌شود. مثال:

<?php
$score = 14;
$result = ($score >= 17) ? "عالی" : (($score >= 10) ? "قبول" : "رد");
echo $result;
?>

در این حالت، بهتر است از if و elseif استفاده شود.

۶. خطاهای رایج

  1. فراموش کردن break;
    باعث اجرای ناخواسته caseهای بعدی می‌شود.

  2. فراموش کردن دونقطه : بعد از case
    نادرست: case 1
    درست: case 1:

  3. استفاده از switch برای بررسی بازه‌ها
    برای بازه‌ها از elseif استفاده کنید.

  4. گذاشتن شرط پیچیده در case
    case فقط یک مقدار مشخص می‌پذیرد.
    نادرست: case ($score >= 10):

  5. استفاده بی‌رویه از عملگر سه‌گانه تودرتو
    خوانایی برنامه را کم می‌کند.

  6. فراموش کردن پرانتز در عملگر سه‌گانه
    شرط را داخل پرانتز بنویسید تا خوانایی بهتر شود.

۷. تمرین کلاسی

  1. برنامه‌ای بنویسید که شماره ماه (۱ تا ۱۲) را در متغیری ذخیره کند و با switch نام فصل آن ماه را نمایش دهد. برای مثال، ماه‌های ۱ تا ۳ بهار هستند.
  2. برنامه‌ای بنویسید که یک حرف را در متغیری ذخیره کند. اگر حرف "A" یا "B" بود پیام «عالی»، اگر "C" بود پیام «خوب» و در غیر این صورت پیام «نیاز به تلاش بیشتر» نمایش دهد.
  3. با استفاده از عملگر سه‌گانه، برنامه‌ای بنویسید که بررسی کند آیا یک عدد زوج است یا فرد.
  4. خطای کد زیر را پیدا کنید:
    
    <?php
    $color = "قرمز";

switch ($color) { case "قرمز": echo "رنگ گرم"; case "آبی": echo "رنگ سرد"; break; } ?>