Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

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

جزء من قسم Logic & Flow في رحلة Java على Coddy — الدرس 37 من 59.

تتيح لك مطابقة الأنماط (Pattern matching) في Java اختبار ما إذا كان الكائن يمتلك نوعاً معيناً واستخراج المكونات منه. وهي تبسط عمليات التحقق من النوع وعمليات التحويل (casting).

دعونا نرى كيفية استخدام مطابقة الأنماط (pattern matching) مع 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) يمكن أن يكون من أنواع مختلفة

يجب أن تستخدم الطريقة مطابقة الأنماط (pattern matching) مع 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: return "Number: " + (value * 2)
        // إذا كان String: return "Text: " + value.toUpperCase()
        // إذا كان Boolean: return "Boolean: " + (!value)
        // لأي نوع آخر: return "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اختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Logic & Flow