أنماط Record
تفكيك Records ضمن الأنماط
أنماط Record درس مجاني في Java Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Java Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Java Academy 4 دروس في المجموع.
أنماط السجلات
يطابق نمط السجل سجلًا ويفكك بنيته، مسندًا مكوّناته إلى متغيرات في خطوة واحدة. فلا حاجة بعد الآن إلى استدعاء كل accessor يدويًا.
سجل لفك بنيته
ابدؤوا بسجل بسيط. مكوّناته هي ما يمكن للنمط استخراجه.
public class Main {
record Point(int x, int y) {}
public static void main(String[] args) {
Point p = new Point(3, 4);
System.out.println(p.x() + ", " + p.y());
}
}فك البنية باستخدام instanceof
بدلًا من كتابة instanceof Point p ثم p.x()، اكتبوا instanceof Point(int x, int y) لإسناد x وy مباشرةً.
public class Main {
record Point(int x, int y) {}
public static void main(String[] args) {
Object obj = new Point(3, 4);
if (obj instanceof Point(int x, int y)) {
System.out.println("Sum: " + (x + y));
}
}
}تتحول المكوّنات إلى متغيرات محلية
الأسماء الموجودة داخل النمط (x وy) هي متغيرات محلية جديدة تحتوي على قيم مكوّنات السجل. تختارون الأسماء بأنفسكم، ولا يلزم أن تطابق أسماء السجل.
public class Main {
record Point(int x, int y) {}
public static void main(String[] args) {
Object obj = new Point(10, 20);
if (obj instanceof Point(int a, int b)) {
System.out.println("a=" + a + " b=" + b);
}
}
}استخدام var في الأنماط
يمكنكم كتابة var لمكوّن ما للسماح للمصرّف باستنتاج نوعه، وهذا مفيد عندما تكون الأنواع طويلة.
public class Main {
record Pair(String key, Integer value) {}
public static void main(String[] args) {
Object obj = new Pair("age", 30);
if (obj instanceof Pair(var key, var value)) {
System.out.println(key + " = " + value);
}
}
}الأنماط في switch
تعمل أنماط السجلات أيضًا في switch، مما يجعل فروع case تبدو كأنها أشكال للبيانات.
public class Main {
record Point(int x, int y) {}
static String classify(Object obj) {
return switch (obj) {
case Point(int x, int y) when x == y -> "on diagonal";
case Point(int x, int y) -> "at " + x + "," + y;
default -> "not a point";
};
}
public static void main(String[] args) {
System.out.println(classify(new Point(5, 5)));
System.out.println(classify(new Point(1, 2)));
}
}مطابقة استنتاج النوع
يجب أن تكون أنواع المكوّنات في النمط متوافقة مع الأنواع المعلنة للسجل. ويُعد استخدام النوع المطابق تمامًا أو var الخيار الآمن.
الدمج مع الحواجز
أضيفوا حارس when بعد نمط سجل للمطابقة فقط عندما تحقق القيم المفككة شرطًا معينًا.
public class Main {
record Temperature(double celsius) {}
static String alert(Object o) {
if (o instanceof Temperature(double c) && c > 38.0) {
return "fever: " + c;
}
return "normal";
}
public static void main(String[] args) {
System.out.println(alert(new Temperature(39.5)));
System.out.println(alert(new Temperature(36.6)));
}
}وصول أوضح إلى البيانات
تتألق أنماط السجلات عندما تحتاجون إلى حقلين فقط. فهي تلغي سلسلة استدعاءات accessors وتجعل البيانات المهمة واضحة في موضع المطابقة.
القيم الفارغة وأنماط السجلات
مثل جميع أنماط instanceof، تكون أنماط السجلات بقيمة false عند null. ولا يحدث فك البنية إلا بعد التأكد من أن القيمة مثيل غير فارغ من السجل.
مثال عملي
فككوا البنية لحساب قيمة مباشرةً من المكوّنات.
public class Main {
record Rectangle(int width, int height) {}
static int area(Object o) {
if (o instanceof Rectangle(int w, int h)) {
return w * h;
}
return 0;
}
public static void main(String[] args) {
System.out.println(area(new Rectangle(4, 5)));
System.out.println(area("not a rect"));
}
}اختبار سريع
اختبروا مدى فهمكم لأنماط السجلات.
مراجعة
لقد تعلمتم أنماط السجلات.
- تختبر نوع السجل وتفكك مكوّناته في آن واحد.
- أسماء المكوّنات متغيرات محلية جديدة تختارونها، ويستنتج
varالأنواع. - تعمل في كل من
instanceofوswitch. - مثل جميع الأنماط، تكون بقيمة false عند null.
الأسئلة الشائعة
هل درس «أنماط Record» مجاني؟
نعم — نص درس «أنماط Record» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Java Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Java Academy 4 دروس في المجموع.
ماذا ستتعلم في «أنماط Record»؟
تفكيك Records ضمن الأنماط تتمرن على Java Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Java Academy؟
لا تُشترط خبرة سابقة. Java Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «أنماط Record»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Java Academy هذا؟
نعم. كل درس في Java Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.