مقدمه
در برنامههای جاوااسکریپت، گزارهها (statements) به همان ترتیبی که نوشته شدهاند، یعنی از
بالا به پایین، اجرا میشوند. اما برنامهنویسی همیشه یک جادهی مستقیم نیست. گاهی اوقات لازم است
که اجرای از بالا به پایین کدها، جای خود را به اجرای شرطی (conditional execution) بدهد.
این یعنی اینکه اجرا یا عدم اجرای یک مجموعه از دستورات به برقرار بودن یا نبودن یک شرط مشخص وابسته شود.
در جاوااسکریپت، برای پیادهسازی سناریوهایی که به
اجرای شرطی نیاز دارند، ساختارهای if و switch تدارک دیده شدهاند.
یک عملگر شرطی هم داریم که دارای نماد ? است و در برخی موارد، استفاده از آن بهصرفهتر است.
گزاره if
گزارهی if شرطی را بررسی میکند و اگر آن شرط برقرار باشد، یعنی با true ارزیابی
شود،
یک مجموعه از دستورات را اجرا میکند. ساختار کلی یک گزارهی if به صورت زیر است.
ابتدا کلمه کلیدی if به همراه یک جفت پرانتز نوشته شده و سپس، عبارت شرطی مورد نظر که در
اینجا condition
نامیده شده درون پرانتزها قرار میگیرد. سپس، یک جفت آکلاد به عنوان بلاک if ایجاد شده و
دستوراتی که مایلیم در
صورت برقرار بودن شرط اجرا شوند، در این بلاک قرار داده میشود.
عبارت شرط که در اینجا condition نام دارد، میتواند یک عبارت بولین یا غیر بولین باشد.
-
اگر condition یک عبارت بولین باشد، دستورات بلاک if در صورت true بودن
مقدار
condition اجرا میشوند.
-
اگر condition یک عبارت غیر بولین باشد، به طور ضمنی به بولین تبدیل میشود و
در صورت true بودن، دستورات بلاک if اجرا میشوند.
به عبارت دیگر، میتوان گفت که بلاک if در صورتی اجرا میشود که عبارت شرطی یک مقدار
truthy باشد.
یادآوری میکنم که مقدار یا عبارتی که در صورت تبدیل به بولین، با مقدار true ارزیابی شود یک
truthy است و عبارت یا
مقداری که در صورت تبدیل به بولین، با false ارزیابی شود،
یک falsy نام دارد. حالا مثال زیر را ببینید.
branching.js
let x = 10;
let y = 15;
let z = 0;
if (x < y) {
console.log("x is smaller than y");
}
if (x == y) {
console.log("x is equalt to y");
}
if (x) {
console.log("x is non-zero");
}
if (z) {
console.log("z is non-zero");
}
در اینجا چهار گزارهی if داریم که از بین آنها، شرط گزارهی اول و سوم برقرار است
و بنابراین، خروجی زیر را خواهیم داشت.
x is smaller than y
x is non-zero
بخش else
یک گزارهی if میتواند شامل یک بخش else هم باشد. ساختار کلی یک
گزارهی
if...else به صورت زیر است.
if (condition) {
} else {
}
به این ترتیب، اگر عبارت condition با یک مقدار truthy ارزیابی شود، دستورات بلاک if و در غیر این صورت، دستورات بلاک else اجرا
خواهند شد. مثال زیر را ببینید.
branching.js
let x = 15;
if (x % 2 == 0) {
console.log("x is even.");
} else {
console.log("x is odd.");
}
در این مثال، شرط if برقرار نیست و بنابراین، خروجی زیر تولید خواهد شد.
x is odd.
بررسی چندین شرط با else if
گاهی اوقات باید چند شرط مورد بررسی قرار بگیرند. در این موارد،
میتوانیم از else if استفاده کنیم. مثال زیر، نحوهی انجام این کار را نشان میدهد.
branching.js
let output;
let x = -3;
if (x > 0) {
output = "positive";
} else if (x < 0) {
output = "negative";
} else {
output = "zero";
}
console.log(output);
گزاره switch
ساختار شرطی دیگر در جاوااسکریپت گزارههای switch هستند که برخی مواقع استفاده از آنها
نسبت به دستورات if…else
تودرتو شده، بهصرفهتر است. در حقیقت، دستورات if…else برای مواقعی که عبارت شرطی پیچیده
بوده و مثلاً شامل
چندین عملگر منطقی باشد و هر حالت شامل مقدار قابل توجهی کد برای اجرا باشد، مناسب هستند. اما اگر عبارت شرطی که
باید بررسی و ارزیابی شود ساده باشد و تنها کاری که میخواهیم بسته به وضعیت آن شرط انجام دهیم این است که
مقداری را به یک متغیر اختصاص دهیم و یا چیزی را در خروجی چاپ کنیم، بهتر است از switch
استفاده کنیم. ساختار
کلی یک گزارهی switch به صورت زیر است.
switch (expression) {
case choice1:
break;
case choice2:
break;
default:
}
مثال زیر نحوهی استفاده از این گزاره را در عمل نشان میدهد.
branching.js
let dayOfWeek = 2;
switch (dayOfWeek) {
case 1:
console.log("Monday");
break;
case 2:
console.log("Tuesday");
break;
case 3:
console.log("Wednesday");
break;
case 4:
console.log("Thursday");
break;
case 5:
console.log("Friday");
break;
case 6:
console.log("Saturday");
break;
case 7:
console.log("Sunday");
break;
default:
console.log("something is wrong!");
}
در اینجا اصطلاحاً روی متغیر dayOfWeek سوئیچ شده تا بسته به مقدار این متغیر، متنی در خروجی چاپ شود.
در مقابل
هر عبارت case مقداری نوشته شده که اگر این مقدار برابر با مقدار متغیر dayOfWeek
باشد، دستور مربوط به این
عبارت case اجرا میشود. اگر مقدار این متغیر با هیچکدام از عبارات case مطابقت نداشته باشد، دستور مربوط به
عبارت default اجرا خواهد شد. در مثال بالا ما مقدار 2 را برای متغیر dayOfWeek
تعیین کردهایم و بنابراین،
دستور مربوط به case 2 اجرا میشود. به طور کلی، اگر این متغیر مقداری بین 1 تا 7 داشته باشد، نام روزی
از هفته
که متناظر با آن مقدار است، چاپ میشود و در غیر این صورت، پیغامی چاپ میشود مبنی بر اینکه اشتباهی رخ داده
است. توجه داشته باشید که استفاده از default در یک گزارهی switch
اختیاری است. مقادیر مختلف را برای متغیر
dayOWeek آزمایش کنید و نتیجه را ببینید.
عملگر شرطی ?
گاهی اوقات، میخواهیم بسته به نتیجهی یک شرط، مقداری را به یک متغیر اختصاص دهیم.
برای مثال:
branching.js
let x = 8;
let result;
if (x % 2 == 0) {
result = "even";
} else {
result = "odd";
}
این قبیل کارها را میتوانیم با استفاده از یک عملگر شرطی به نام question mark
که دارای نماد ? است، به شکل مختصرتر و سادهتری انجام دهیم.
عملگر question mark تنها عملگر جاوااسکریپت است که دارای 3 عملوند است و از اینرو
عملگر ternary هم گفته میشود. سینتکس کلی این عملگر به صورت زیر است.
let result = condition ? value1 : value2;
اگر condition یک مقدار truthy باشد، مقدار value1 و در غیر این صورت، مقدار value2 برگردانده میشود.
پس، مثال بالا را میتوانیم با استفاده از عملگر ternary به صورت زیر بنویسیم.
branching.js
let x = 8;
let result = (x % 2 == 0) ? "even": "odd";
نتیجهی این کد، مثل کد قبلی، این است که مقدار رشتهای even در متغیر
result ذخیره میشود.