مطابقة الأنماط
جزء من قسم 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”
التحدي
سهلقم بإنشاء طريقة تسمى processValue تأخذ وسيطًا واحدًا:
- كائن (
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));
}
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Logic & Flow
1المصفوفات متعددة الأبعاد
أساسيات المصفوفات ثنائية الأبعادالوصول إلى عناصر المصفوفات ثنائية الأبعادالحلقات المتداخلة مع المصفوفات ثنائية الأبعادمراجعة - المصفوفات ثنائية الأبعادجمع وطرح المصفوفاتالمصفوفات المتعرجة (Jagged Arrays)المصفوفات ثلاثية الأبعاد وما بعدهاأنماط المصفوفات ثنائية الأبعاد الشائعةمراجعة - كل شيء عن المصفوفات2HashMap الجزء الأول
ما هو الـ HashMap؟تعريف الـ HashMapالوصول إلى القيمالتحقق من وجود المفتاحتعديل القواميسملخص - HashMap3HashMap الجزء الثاني
دوال HashMapالتكرار باستخدام keySet()التكرار باستخدام entrySet()HashMap متداخلمراجعة - إدارة المستودعمراجعة - عمليات HashMap6التحكم المتقدم في تدفق البرنامج
العبارات المعنونةتعبير Switchمطابقة الأنماطجمل الحمايةمراجعة - تدفق التحكم