Menu
CoddyTech

مطابقة الأنماط

جزء من قسم المنطق وتدفق التنفيذ في رحلة 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

التحدي

سهل

أنشئ method باسم processValue تأخذ وسيطًا واحدًا:

  1. كائن (value) يمكن أن يكون من أنواع مختلفة

يجب أن تستخدم method مطابقة الأنماط مع instanceof لمعالجة القيمة وإرجاع سلسلة نصية وفقًا للقواعد التالية:

  • إذا كانت Integer: أرجِع "Number: " متبوعة بالقيمة مضاعفة
  • إذا كانت 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 عبر الإنترنت