Menu
Coddy logo textTech

התאמת תבניות

חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-Java של Coddy. שיעור 37 מתוך 59.

התאמת תבניות ב-Java מאפשרת לבדוק אם לאובייקט יש טיפוס מסוים ולחלץ ממנו רכיבים. היא מפשטת פעולות של בדיקת טיפוסים והמרת טיפוסים.

בואו נראה איך להשתמש בהתאמת תבניות עם instanceof:

Object obj = "Hello";
if (obj instanceof String str) {
   // ההמרה של str ל-String מתבצעת אוטומטית
   System.out.println(str.toUpperCase());
}

לאחר הרצת הקוד שלמעלה, הפלט הוא:

"HELLO"

אפשר גם לשרשר בדיקות התאמת תבניות באמצעות else if:

Object value = 42;
String result;
if (value instanceof Integer i) {
    result = "Number: " + i;
} else if (value instanceof String s) {
    result = "Text: " + s;
} else {
    result = "Unknown";
}

לאחר הרצת הקוד שלמעלה, result מכיל:

“Number: 42”

challenge icon

אתגר

קל

צרו מתודה בשם processValue שמקבלת ארגומנט אחד:

  1. אובייקט (value) שיכול להיות מסוגים שונים

על המתודה להשתמש בהתאמת תבניות עם instanceof כדי לעבד את הערך ולהחזיר מחרוזת לפי הכללים הבאים:

  • אם זה Integer: החזירו "Number: " ואחריו הערך כשהוא מוכפל ב־2
  • אם זה String: החזירו "Text: " ואחריו הערך באותיות גדולות
  • אם זה Boolean: החזירו "Boolean: " ואחריו הערך ההפוך (true הופך ל־false ולהפך)
  • לכל סוג אחר: החזירו "Unknown"

נסו בעצמכם

import java.util.Scanner;

public class Main {
    public static String processValue(Object value) {
        // TODO: השתמש בהתאמת תבניות עם instanceof כדי לעבד את הערך
        // אם הערך הוא Integer: החזר "Number: " + (value * 2)
        // אם הערך הוא String: החזר "Text: " + value.toUpperCase()
        // אם הערך הוא Boolean: החזר "Boolean: " + (!value)
        // עבור כל טיפוס אחר: החזר "Unknown"
        
    }
    
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String type = scanner.nextLine();
        String inputValue = scanner.nextLine();
        
        Object value = switch(type) {
            case "Integer" -> Integer.parseInt(inputValue);
            case "String" -> inputValue;
            case "Boolean" -> Boolean.parseBoolean(inputValue);
            default -> inputValue;
        };
        
        System.out.println(processValue(value));
    }
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה לוגיקה וזרימת תוכנית

תרגלו בעצמכם: קומפיילר Java אונליין