شرطها و تصمیمگیری
گرفتن تصمیم در برنامه با if و else، انتخابهای چندگانه با else if و switch و شرط کوتاه با عملگر سهتایی.
آنچه در این درس میآموزید
- با if و else مسیر اجرای برنامه را بر پایهٔ شرط تغییر دهید
- حالتهای چندگانه را با else if و switch مدیریت کنید
- شرطهای کوتاه را با عملگر سهتایی بنویسید
فهرست مطالب
تا اینجا برنامههای ما خطبهخط از بالا به پایین اجرا میشدند. برنامههای واقعی اما باید تصمیم بگیرند: اگر کاربر وارد شده باشد این مسیر، وگرنه مسیر دیگر. اینجاست که شرطها وارد میشوند. یک شرط یک عبارت بولی است — چیزهایی که با === و && و || ساختید — و بر پایهٔ درست یا نادرست بودنش، مسیر اجرای برنامه عوض میشود.
if و else
سادهترین شکل تصمیمگیری دو مسیره است:
const score = 14;
if (score >= 10) {
console.log("You passed");
} else {
console.log("You failed");
}You passed
شرط داخل پرانتز بررسی میشود؛ اگر true باشد بلوک اول (بین آکولادها) اجرا میشود و اگر false باشد بلوک else. فقط یکی از دو بلوک هر بار اجرا میشود.
انتخاب از میان چند مسیر با else if
وقتی بیش از دو حالت دارید، شرطها را زنجیر میکنیم:
const temperature = 12;
if (temperature >= 30) {
console.log("It is hot");
} else if (temperature >= 15) {
console.log("It is mild");
} else {
console.log("It is cold");
}It is cold
شرطها از بالا به پایین بررسی میشوند و اولین شرط درست برنده میشود؛ بقیه حتی بررسی نمیشوند. برای همین ترتیب مهم است: چون 12 >= 30 نادرست و 12 >= 15 هم نادرست بود، بلوک else اجرا شد.
عملگر سهتایی
برای انتخاب دوگانهٔ کوتاه — بهخصوص وقتی میخواهید مقداری را انتخاب کنید نه دستور اجرا کنید — عملگر سهتایی (Ternary Operator) کد را فشردهتر میکند:
const age = 16;
const ticket = age < 18 ? "Half price" : "Full price";
console.log(ticket);Half price
ساختار آن شرط ? مقدار اگر درست : مقدار اگر نادرست است. همین کد با if و else هم نوشتنی بود، اما وقتی فقط یک مقدار انتخاب میشود، شکل سهتایی روانتر است. برای منطق پیچیده سراغش نروید؛ خوانایی مهمتر از کوتاهی است.
switch؛ وقتی یک مقدار چند چهره دارد
اگر قرار است یک مقدار را با چند حالت مشخص مقایسه کنید، switch تمیزتر از زنجیرهٔ طولانی else if است:
const day = "Saturday";
switch (day) {
case "Saturday":
case "Sunday":
console.log("Workday");
break;
case "Friday":
console.log("Day off");
break;
default:
console.log("Unknown");
}Workday
switch مقدار day را با هر case مقایسه میکند (با همان برابری سختگیرانهٔ ===) و از اولین برابری شروع به اجرا میکند. دو نکته در این مثال:
- دو
caseپشت سر هم یعنی برای «شنبه» و «یکشنبه» یک نتیجه؛ این رفتار به آن میگوید به پایین ادامه بده. breakاجرا را همانجا قطع میکند. اگرbreakنگذارید، اجرا بهcaseهای بعدی سرریز میشود و نتایج ناخواسته چاپ میشوند؛ این رایجترین خطایswitchاست.
مقادیر درست و نادرست
شرط داخل if لازم نیست حتماً بولی باشد. جاوااسکریپت هر مقداری را به بولی تبدیل میکند؛ به مقدارهایی که false حساب میشوند «falsy» میگویند: false، عدد 0، رشتهٔ خالی ""، null، undefined و NaN. همهٔ مقادیر دیگر «truthy» هستند. برای مثال if (userName) یعنی «اگر نام کاربر خالی نباشد».
تمرینها
تمرین
تمرین ۱ — ارزشیابی نمره
متغیری به نام score با مقدار ۱۸ بسازید. اگر نمره دستکم ۱۷ بود «عالی»، اگر دستکم ۱۲ بود «قابل قبول» و در غیر این صورت «نیاز به تلاش بیشتر» چاپ کنید.
// Write your code hereنمایش راهحل
const score = 18;
if (score >= 17) {
console.log("Excellent");
} else if (score >= 12) {
console.log("Acceptable");
} else {
console.log("Needs more effort");
}Excellent
::: :::
خلاصه
ifوelseمسیر اجرای برنامه را بر پایهٔ یک عبارت بولی عوض میکنند.- با
else ifچند حالت را به ترتیب بررسی میکنید؛ اولین شرط درست اجرا میشود. - عملگر سهتایی
شرط ? x : yبرای انتخاب کوتاه بین دو مقدار است. switchبرای مقایسهٔ یک مقدار با چند حالت مشخص است و بدونbreakبه پایین سرریز میشود.- هر مقداری در شرط به بولی تبدیل میشود؛ مقادیر falsy مثل
0و""وnullمثلfalseرفتار میکنند.
تصمیمگیری داریم؛ حالا نوبت تکرار است. در درس بعدی با حلقهها یاد میگیریم کارهای تکراری را به کامپیوتر بسپاریم.