כל תוכנית צריכה להגיב. משתמש לוחץ על כפתור. API מחזיר נתונים. שדה בטופס מתרוקן. ללא דרך ליצור פיצול (branching), הקוד שלך ירוץ שורה אחר שורה ללא קשר למה שקורה בפועל. תנאים (Conditionals) מעניקים ל-JavaScript את היכולת לבחור. הם מקבלי ההחלטות בתוך הפונקציות שלך, השומרים שקובעים מה ירוץ ומה יתבטל. ברגע שתבין איך לכתוב אותם היטב, תפסיק לכתוב סקריפטים נוקשים ותתחיל לבנות תוכנה שמגיבה באמת.

למה תנאים חשובים

זרימת הבקרה (Control flow) היא עמוד השדרה של הלוגיקה. משתמשים בתנאים כדי לאמת סיסמאות לפני ששולחים אותן לשרת. בודקים אם עגלת קניות ריקה לפני חישוב מס. מזהים אם בקשת רשת נכשלה כדי שניתן יהיה להציג שגיאה במקום מסך ריק. כל התרחישים הללו מסתמכים על אותו רעיון פשוט: להעריך משהו, ואז לפעול בהתאם.

ללא תנאים, האפליקציה שלך תהיה מונולוג במקום דיאלוג. היא לא תוכל להתמודד עם תרחישי נתונים שונים, לנהל שגיאות בצורה אלגנטית, או להגיב לפעולות משתמש בצורה משמעותית כלשהי. הם מאפשרים לך לשלוט באופן שבו התוכנית שלך רצה תחת אי-ודאות של העולם האמיתי.

משפט ה-if הבסיסי

המקום הפשוט ביותר להתחיל בו הוא ה-if העצמאי. הוא אומר: אם הדבר הזה נכון, בצע את הפעולה הזו. זהו זה. בלי גיבוי, בלי נתיב חלופי.

if (x % 2 === 0) {
    console.log("Even");
}

בקטע הקוד הזה, אופרטור השארית (modulus) בודק האם x מתחלק בדיוק ב-2. כאשר השארית היא אפס, הקונסול מדפיס את המחרוזת. אם x הוא אי-זוגי, לא קורה דבר. הבלוק מוסב ורצף ההרצה ממשיך למטה.

ההתעלמות השקטה הזו חשובה. לפעמים רוצים להגן רק על פעולה בודדת. אולי תרצה להוסיף מחלקת CSS לכפתור רק כשהוא פעיל, או להוסיף פריט למערך רק כשהקלט אינו ריק. משפט if פשוט מטפל ברגעים הללו מבלי לאלץ אותך לכתוב לוגיקה שאינך זקוק לה.

הוספת חלופה באמצעות if-else

להחלטות אמיתיות יש בדרך כלל שני צדדים. או שהמשתמש מספיק מבוגר, או שהוא לא. או שהתשלום הצליח, או שהוא נכשל. מבנה ה-if-else מכסה את שניהם.

if (age >= 18) {
    console.log("Adult");
} else {
    console.log("Not an Adult");
}

בלוק ה-else תופס את כל מה שהתנאי הראשון דחה. הוא יוצר פיצול בינארי נקי. התבנית הזו עובדת היטב עבור מתגים (toggles), הרשאות ודגלי פיצ'רים (feature flags). שמרו על הלוגיקה בתוך כל בלוק ממוקדת. אם אתם מוצאים את עצמכם עורמים יותר מדי משימות בתוך פיצול אחד, זה בדרך כלל סימן לפצל את העבודה לפונקציות קטנות יותר.

בדיקת נתיבים מרובים באמצעות else if

החיים מציעים לעיתים רחוקות רק שתי אפשרויות. ייתכן שתצטרכו לסווג מספר כחיובי, שלילי או אפס. ייתכן שתקבעו תעריף משלוח על סמך טווחי משקל. עבור השוואות מרובות ומסודרות, השתמשו ב-else if.

if (x > 0) {
    console.log("Positive");
} else if (x < 0) {
    console.log("Negative");
} else {
    console.log("Zero");
}

JavaScript מעבדת את אלו מלמעלה למטה. ברגע שתנאי אחד עובר, היא מריצה את הבלוק הזה ומתעלמת מהשאר. הסדר חשוב. אם בדקתם x > 0 אחרי שבדקתם x > 100, הבדיקה המחמירה יותר לעולם לא תרוץ כי הבדיקה המקלה יותר תתפוס אותה קודם. חשבו על else if כעל רשימת עדיפויות.

משפט ה-switch

כשמשווים ערך אחד מול הרבה אפשרויות נפרדות, שרשרת ארוכה של משפטי else if עלולה להרגיש חזרתית. משפט switch מסדר את זה. הוא מתאים ביטוי לפעולות case ומריץ את הבלוק המתאים.

switch (true) {
    case marks >= 90:
        Branch = "Computer science";
        break;
    case marks >= 80:
        Branch = "Mechanical";
        break;
    default:
        Branch = "Other";
}

דוגמה זו משתמשת ב-switch(true) כדי להעריך תנאים בוליאניים ישירות, שזהו תבנית JavaScript נפוצה כאשר הלוגיקה שלכם מסתמכת על טווחים ולא על שוויון מדויק. מילת המפתח break היא חיונית. בלעדיה, הרצף "יזלוג" למקרה הבא ללא קשר לשאלה אם הוא מתאים, מה שרק לעיתים רחוקות הוא מה שאתם רוצים כאן. פסוקית ה-default פועלת כמו else סופי, ותופסת כל דבר שלא התאים למקרים הקודמים.

ה-switch בולט במיוחד כשיש לכם אפשרויות ברורות וקבועות. לעיתים קרובות קל יותר לסרוק אותו מאשר ערימה גבוהה של בלוקי else if, במיוחד כשכל פיצול פשוט מקצה ערך או קורא לפונקציה בודדת.

האופרטור הטרינרי (Ternary Operator)

עבור החלטות בינאריות קצרות, האופרטור הטרינרי שומר על הדברים תמציתיים. הוא מקבל שלושה אופרנדים: תנאי, ערך אם התנאי מתקיים, וערך אם התנאי לא מתקיים.

const result = (age >= 18) ? "Eligible" : "Not eligible";

ניתן להשתמש בו להקצאות מהירות או להחזרות (returns) בשורה אחת. הוא עובד היטב כאשר התוצאה היא ביטוי פשוט. התנגדו לדחף לקנן אופרטורים טרינריים בשלוש רמות עומק. טרינרי מקונן עשוי לחסוך שורות, אך הוא בא על חשבון הקריאות. כשהלוגיקה שלכם גדלה, בלוק if-else יהיה בדרך כלל ידידותי יותר למפתח הבא שיפתח את הקובץ.

החלטות מקוננות

לוגיקה מורכבת דורשת לעיתים שאלות המשך. ניתן לקנן if בתוך if אחר כדי לדייק את ההחלטה.

if (weather === "sunny") {
    if (temp > 30) {
        console.log("