کنترل جریان

شرط if/else، switch/case، عملگر سه‌تایی و ارزیابی کوتاه‌مدار برای تصمیم‌گیری در کد

کنترل جریان چیست؟

به‌طور پیش‌فرض، جاوا اسکریپت کد را از بالا به پایین و خط به خط اجرا می‌کند. اما گاهی نیاز داریم:

به این «تصمیم‌گیری‌ها و تغییر مسیر اجرا» کنترل جریان (Control Flow) می‌گویند.

شرط if

ساده‌ترین ساختار شرطی — کد داخل بلاک فقط وقتی اجرا می‌شود که شرط truthy باشد:

if (شرط) {
    // اگر شرط درست باشد اجرا می‌شود
}

// مثال:
const age = 20;
if (age >= 18) {
    console.log("شما بزرگسال هستید");
}

شرط else

اگر شرط if نادرست باشد، بلاک else اجرا می‌شود:

const age = 15;
if (age >= 18) {
    console.log("بزرگسال");
} else {
    console.log("کودک"); // این اجرا می‌شود
}

شرط else if

برای بررسی چند شرط پشت سر هم:

const score = 85;

if (score >= 90) {
    console.log("عالی (A)");
} else if (score >= 80) {
    console.log("خوب (B)"); // این اجرا می‌شود
} else if (score >= 70) {
    console.log("متوسط (C)");
} else {
    console.log("نیاز به تلاش");
}

نکته: جاوا اسکریپت شرط‌ها را از بالا بررسی می‌کند و به محض برقراری یکی، بقیه را بررسی نمی‌کند.

شرط‌های تو در تو

می‌توان شرط‌ها را داخل هم قرار داد — اما برای خوانایی از تو در تو زیاد پرهیز کنید:

const age = 25;
const hasLicense = true;

if (age >= 18) {
    if (hasLicense) {
        console.log("می‌توانید رانندگی کنید");
    } else {
        console.log("اول گواهی بگیرید");
    }
} else {
    console.log("سن شما کافی نیست");
}

// بهتر: با && ترکیب کنید
if (age >= 18 && hasLicense) {
    console.log("می‌توانید رانندگی کنید");
}

switch

وقتی می‌خواهید یک متغیر را با چند مقدار مشخص مقایسه کنید، switch خواناتر است:

const fruit = "سیب";

switch (fruit) {
    case "موز":
        console.log("زرد");
        break;
    case "سیب":
        console.log("قرمز"); // اجرا می‌شود
        break;
    case "پرتقال":
        console.log("نارنجی");
        break;
    default:
        console.log("ناشناخته");
}

مفهوم case

هر case یک حالت ممکن را بررسی می‌کند. مقایسه در switch از نوع سخت‌گیرانه (===) است.

مفهوم default

اگر هیچ case‌ای مطابقت نداشته باشد اجرا می‌شود — مانند else در if.

نقش break

بدون break، اجرا از case مطابقت‌یافته به case‌های بعدی سرریز (Fall-Through) می‌کند:

switch (2) {
    case 1:
        console.log("یک");
    case 2:
        console.log("دو");   // اجرا می‌شود
    case 3:
        console.log("سه");   // سرریز! این هم اجرا می‌شود
        break;
    case 4:
        console.log("چهار"); // دیگر نه (break شده)
}

گروه‌بندی caseها

switch (day) {
    case "شنبه":
    case "یکشنبه":
    case "دوشنبه":
        console.log("ابتدای هفته");
        break;
    case "پنجشنبه":
    case "جمعه":
        console.log("آخر هفته");
        break;
}

switch در برابر if/else

ویژگیswitchif/else
نوع مقایسهفقط === با مقادیر ثابتهر عبارتی
خواناییبرای بسیاری از مقادیر بهتربرای شرط‌های پیچیده بهتر
محدوده (Range)پشتیبانی نمی‌شودپشتیبانی می‌شود

عملگر سه‌تایی (Ternary)

نسخه فشرده if/else که یک عبارت است (مقدار تولید می‌کند):

// ساختار: شرط ? مقدار درست : مقدار نادرست
const age = 20;
const status = age >= 18 ? "بزرگسال" : "کودک";

// در console.log:
console.log(score > 50 ? "قبول" : "مردود");

// تو در تو (با احتیاط!):
const grade = score >= 90 ? "A"
            : score >= 80 ? "B"
            : score >= 70 ? "C"
            : "F";

ارزیابی کوتاه‌مدار (Short-Circuit)

روشی برای اجرای شرطی کد بدون if:

// && — «اگر اولی درست است، دومی را اجرا کن»
isLoggedIn && console.log("خوش آمدید");

// || — «اگر اولی نادرست است، دومی را استفاده کن»
const name = userInput || "مهمان";

// ?? — «فقط اگر null/undefined بود»
const count = data ?? 0;

اشتباهات رایج

// ۱. سمی‌کالن لازم نیست بعد از بلاک:
if (x > 0) {
    console.log("مثبت");
}

// ۲. بلاک بدون آکولاد فقط یک دستور می‌گیرد:
if (x > 0)
    console.log("مثبت");
    console.log("این همیشه اجرا می‌شود!"); // خطای منطقی رایج!

// ۳. انتساب در شرط (اشتباه رایج):
if (x = 5) { } // همیشه درست! باید === بود

جمع‌بندی

این مبحث بخشی از دوره آموزش کامل جاوا اسکریپت است.

ابزارهای مرتبط