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

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

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

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

دعونا نرى كيفية استخدام مطابقة الأنماط (pattern matching) مع instanceof:

Object obj = "Hello";
if (obj instanceof String str) {
   // يتم تحويل str تلقائياً إلى String
   System.out.println(str.toUpperCase());
}

بعد تنفيذ الكود أعلاه، تكون المخرجات هي:

"HELLO"

يمكنك أيضاً استخدام مطابقة الأنماط في تعبيرات switch:

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"

ورقة مرجعية

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

Object obj = "Hello";
if (obj instanceof String str) {
   // يتم تحويل str تلقائيًا إلى String
   System.out.println(str.toUpperCase());
}

يمكنك ربط عدة عمليات تحقق من مطابقة الأنماط:

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";
}

جرّب بنفسك

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اختبر نفسك

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

جميع دروس Logic & Flow