دستور switch و عملگر سهگانه
هدفهای آموزشی
در پایان این مرحله، دانشآموز باید بتواند:
- دستور
switchرا برای بررسی چند حالت مشخص به کار ببرد. - تفاوت
switchوelseifرا توضیح دهد. - نقش
breakرا درswitchبیان کند. - عملگر سهگانه را در حالتهای ساده استفاده کند.
۱. دستور switch چیست؟
گاهی میخواهیم یک متغیر را با چند مقدار مشخص مقایسه کنیم. برای مثال، نام روز هفته را بررسی کنیم و برای هر روز یک پیام نمایش دهیم. در این حالت، استفاده از elseif پشت سر هم طولانی میشود. دستور switch برای این نوع بررسی مناسبتر است.
ساختار:
<?php
switch (متغیر) {
case مقدار اول:
// دستورها
break;
case مقدار دوم:
// دستورها
break;
default:
// دستورهای حالت پیشفرض
break;
}
?>
نکتهها:
- مقدار متغیر داخل پرانتز
switchنوشته میشود. - هر حالت با
caseو یک مقدار مشخص شروع میشود. - پس از هر
caseمعمولاً ازbreak;استفاده میشود. - بخش
defaultبرای حالتی است که هیچکدام از مقدارها مطابقت نداشته باشند. 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 استفاده شود.
۶. خطاهای رایج
-
فراموش کردن
break;
باعث اجرای ناخواستهcaseهای بعدی میشود. -
فراموش کردن دونقطه
:بعد ازcase
نادرست:case 1
درست:case 1: -
استفاده از
switchبرای بررسی بازهها
برای بازهها ازelseifاستفاده کنید. -
گذاشتن شرط پیچیده در
case
caseفقط یک مقدار مشخص میپذیرد.
نادرست:case ($score >= 10): -
استفاده بیرویه از عملگر سهگانه تودرتو
خوانایی برنامه را کم میکند. -
فراموش کردن پرانتز در عملگر سهگانه
شرط را داخل پرانتز بنویسید تا خوانایی بهتر شود.
۷. تمرین کلاسی
- برنامهای بنویسید که شماره ماه (۱ تا ۱۲) را در متغیری ذخیره کند و با
switchنام فصل آن ماه را نمایش دهد. برای مثال، ماههای ۱ تا ۳ بهار هستند. - برنامهای بنویسید که یک حرف را در متغیری ذخیره کند. اگر حرف
"A"یا"B"بود پیام «عالی»، اگر"C"بود پیام «خوب» و در غیر این صورت پیام «نیاز به تلاش بیشتر» نمایش دهد. - با استفاده از عملگر سهگانه، برنامهای بنویسید که بررسی کند آیا یک عدد زوج است یا فرد.
- خطای کد زیر را پیدا کنید:
<?php $color = "قرمز";
switch ($color) { case "قرمز": echo "رنگ گرم"; case "آبی": echo "رنگ سرد"; break; } ?>