תנאים (if / switch)

מה זה תנאי?

תנאי הוא מבנה שמאפשר לתוכנית לבחור בין אפשרויות שונות על פי מצב. אם משהו נכון - עשה X, אחרת - עשה Y.

if

if (condition) {
    // קוד שיורץ אם התנאי נכון
}

דוגמה:

int age = 20;

if (age >= 18) {
    System.out.println("אתה בוגר");
}

if / else

if (condition) {
    // אם נכון
} else {
    // אם לא נכון
}

דוגמה:

int score = 75;

if (score >= 60) {
    System.out.println("עברת");
} else {
    System.out.println("נכשלת");
}

if / else if / else

כשיש יותר מ-2 אפשרויות:

int grade = 85;

if (grade >= 90) {
    System.out.println("מצוין");
} else if (grade >= 80) {
    System.out.println("טוב מאוד");
} else if (grade >= 70) {
    System.out.println("טוב");
} else if (grade >= 60) {
    System.out.println("מספיק");
} else {
    System.out.println("נכשל");
}

חשוב: הסדר חשוב! Java בודקת את התנאים מלמעלה למטה, ועוצרת בראשון שמתקיים.

תנאים מקוננים

if (age >= 18) {
    if (hasLicense) {
        System.out.println("יכול לנהוג");
    } else {
        System.out.println("צריך רישיון");
    }
} else {
    System.out.println("עדיין קטין");
}

תנאים מורכבים

if (age >= 18 && hasLicense) {
    System.out.println("יכול לנהוג");
}

if (day.equals("שבת") || day.equals("ראשון")) {
    System.out.println("סוף שבוע");
}

if (!isLoggedIn) {
    System.out.println("התחבר תחילה");
}

האופרטור הטרנרי

קיצור ל-if/else:

String status = (age >= 18) ? "בוגר" : "קטין";
int max = (a > b) ? a : b;
int absValue = (n < 0) ? -n : n;

switch - תנאי מרובה מצבים

כשיש הרבה אפשרויות ברורות - switch יכול להיות נקי יותר:

int day = 3;

switch (day) {
    case 1:
        System.out.println("ראשון");
        break;
    case 2:
        System.out.println("שני");
        break;
    case 3:
        System.out.println("שלישי");
        break;
    case 4:
        System.out.println("רביעי");
        break;
    case 5:
        System.out.println("חמישי");
        break;
    case 6:
        System.out.println("שישי");
        break;
    case 7:
        System.out.println("שבת");
        break;
    default:
        System.out.println("לא תקין");
}

חשיבות ה-break

בלי break, Java "נופלת" ל-case הבא:

int x = 1;
switch (x) {
    case 1:
        System.out.println("אחד");
        // בלי break!
    case 2:
        System.out.println("שתיים");
        break;
}
// פלט: אחד\nשתיים

לפעמים זה שימושי בכוונה:

case 1:
case 2:
case 3:
    System.out.println("בין 1 ל-3");
    break;

switch עם String (מ-Java 7)

String command = "START";

switch (command) {
    case "START":
        System.out.println("מתחיל...");
        break;
    case "STOP":
        System.out.println("עוצר...");
        break;
    default:
        System.out.println("פקודה לא מוכרת");
}

switch expression (מ-Java 14)

תחביר חדש וקצר יותר:

String name = switch (day) {
    case 1 -> "ראשון";
    case 2 -> "שני";
    case 3 -> "שלישי";
    default -> "לא תקין";
};

אין צורך ב-break, אפשר להחזיר ערך ישירות.

מתי להשתמש ב-if ומתי ב-switch

  • if / else - תנאים מורכבים, השוואות (>, <, >=), שילובים לוגיים
  • switch - כשבודקים ערך אחד מול הרבה אפשרויות שוות (==)

דוגמה מלאה: מחשבון פשוט

import java.util.Scanner;

public class Calculator {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("מספר ראשון: ");
        double a = scanner.nextDouble();

        System.out.print("פעולה (+, -, *, /): ");
        char op = scanner.next().charAt(0);

        System.out.print("מספר שני: ");
        double b = scanner.nextDouble();

        double result = 0;
        boolean valid = true;

        switch (op) {
            case '+': result = a + b; break;
            case '-': result = a - b; break;
            case '*': result = a * b; break;
            case '/':
                if (b == 0) {
                    System.out.println("אי אפשר לחלק באפס");
                    valid = false;
                } else {
                    result = a / b;
                }
                break;
            default:
                System.out.println("פעולה לא תקינה");
                valid = false;
        }

        if (valid) {
            System.out.println("תוצאה: " + result);
        }

        scanner.close();
    }
}

בדקו את עצמכם

נסו לענות לבד לפני שאתם פותחים את התשובה.

  1. מה קורה ב-switch ישן אם שוכחים break?

    1. הביצוע "נופל" וממשיך ל-case הבא
    2. שום דבר לא קורה
    3. שגיאת קומפילציה
    4. רק ה-default רץ
    הצגת התשובה

    תשובה א. בלי break הקוד ממשיך לבצע גם את ה-case שאחריו (fall-through). ב-switch עם חצים (->) זה לא קורה.

  2. מה הביטוי השקול ל-if (x > 0) y = 1; else y = -1;?

    1. y = (x > 0) || -1;
    2. y = x > 0 ? 1 : -1;
    3. y = x > 0 : 1 ? -1;
    4. y = x ? 1 : -1;
    הצגת התשובה

    תשובה ב. האופרטור המשולש: תנאי ? ערך-אם-אמת : ערך-אם-שקר.