تم تقديم أنماط تسجيل Java في Java 16 كجزء من Project Amber وتم تحسينها في Java 21 مع إضافة أدوات التفكيك ومطابقة الأنماط. تتيح هذه الميزة طريقة أكثر إيجازًا ومرونة للتعامل مع البيانات في تطبيقات Java. في هذا البرنامج التعليمي، سنغطي مفهوم أنماط التسجيل، وكيف تساعد في مطابقة الأنماط، وأمثلة الترميز المختلفة.
1. ملخص سريع لسجلات جافا
قبل الغوص في أنماط السجلات، دعونا نلقي نظرة سريعة على سجلات Java. تم تقديم السجلات في Java 14 كنوع جديد من الفئات المصممة خصيصًا للاحتفاظ بالبيانات غير القابلة للتغيير. إنها تلغي الحاجة إلى كتابة تعليمات برمجية معيارية من خلال توفير صيغة أكثر إيجازًا لتعريف الفئات بالبيانات. في المثال التالي، قمنا بتعريف سجل يسمى "الشخص" بثلاثة حقول: الاسم الأول، واسم العائلة، والعمر.
شخص السجل (الاسم الأول للسلسلة، الاسم الأخير للسلسلة، العمر الحقيقي) {}
السجلات، كونها غير قابلة للتغيير، تقيد بعض الخصائص:
تقوم السجلات تلقائيًا بإنشاء طرق إنشاء وحصول لكل حقل، مما يجعلها أكثر ملاءمة لحاملي البيانات من الفئات التقليدية.
2. ما هي أنماط التسجيل؟
تجمع أنماط السجلات، المقدمة في Java 21، بين مفهوم الأنماط والسجلات التي تسمح بتفكيك واستخراج القيم من السجلات بسهولة. يتكون نمط السجل من نوع فئة السجل ومتغيرات النمط الاختيارية التي يتم تعيين قيم لها مستخرجة من السجل الهدف فقط في حالة نجاح الاختبار.
القيمة الخالية لا تتطابق مع أي نمط سجل، لذلك لن تتم تهيئة متغيرات النمط في هذه الحالة.
3. مدمرات السجلات
المدمر هو عكس المنشئ. يقوم باستخراج القيم من كائن بدلاً من إضافتها. في سياق السجلات، يُطلق على أداة التدمير اسم "أداة التفكيك". يسمح بتحليل قيم السجل إلى مكوناتها الفردية. لنفترض أن لدينا سجلاً باسم "الاسم" يحتوي على الحقول التالية:
سجل العميل (الاسم الأول للسلسلة، الاسم الأخير للسلسلة، العمر الحقيقي) {}
يمكننا استخدام أداة التفكيك لاستخراج قيم هذه الحقول من مثيل سجل "العميل"، كما هو موضح في المثال التالي:
العميل العميل = العميل الجديد("Jane", "Smith", 30);
if (مثيل العميل للعميل (String firstName، String lastName، int age)) {
System.out.println("الاسم الأول:" الاسم الأول); // جين
System.out.println("اسم العائلة:" اسم العائلة); // سميث
System.out.println("العمر: "age); // 30
يمكن أن تكون هياكل السجلات مفيدة في المواقف التي نحتاج فيها إلى تخزين واسترجاع قيم متعددة مرتبطة ككائن واحد. تسمح لنا ميزة تفكيك السجلات باستخراج هذه القيم واستخدامها بسهولة في الكود الخاص بنا.
4. تسجيل الأنماط في بيانات المحول
قدمت Java 16 مطابقة الأنماط لمثيلات العبارات، والتي تم توسيعها بشكل أكبر في Java 21 لتشمل عبارات التبديل. فهو يسمح بتعليمات برمجية أكثر إيجازًا وقابلية للقراءة أثناء التعامل مع أنماط متعددة.
لنفترض أن لدينا سجلًا باسم "الحساب" يتضمن ثلاثة أنواع فرعية: "حساب التوفير" و"حساب بطاقة الائتمان" و"حساب بطاقة الائتمان المنزلية". كل نوع فرعي لديه طريقة مختلفة لحساب رصيده. يمكننا استخدام نمط السجل في بيان التبديل للتعامل مع هذه الحالات الثلاث، كما هو موضح أدناه:
حساب الواجهة {}
تسجيل حساب التوفير (الرصيد المزدوج) ينفذ الحساب {}
تسجيل حساب CreditCardAccount(حد ائتماني مزدوج، استخدام مزدوج) ينفذ الحساب {}
سجل HomeLoanAccount(مبلغ إجمالي مزدوج، مبلغ مضاعف مدفوع) ينفذ الحساب {}
حساب الحساب= حساب بطاقة الائتمان الجديد(10000, 1000);
التبديل (الشكل) {
حالة حساب التوفير:
System.out.println("رصيد الحساب هو" الرصيد);
استراحة؛
حالة حساب CreditCardAccount ج:
System.out.println("رصيد الائتمان هو: "(الحد الائتماني المستخدم));
استراحة؛
حالة HomeLoanAccount h:
System.out.println("الرصيد" (إجمالي المبلغ-المبلغ المدفوع));
استراحة؛
تقصير:
System.out.println("حساب غير معروف");
5. الأنماط المتداخلة
بالإضافة إلى استخراج القيم من سجل واحد، يمكن أيضًا تداخل أنماط السجلات للتعامل مع السجلات الأكثر تعقيدًا. لنفترض أن لدينا سجلاً باسم "الحساب" يحتوي على حقل من النوع "العميل" وحقل آخر من النوع "العنوان". يمكننا استخدام أنماط التسجيل المتداخلة لاستخراج القيم من كلا الحقلين، كما هو موضح في المثال التالي:
سجل العميل (الاسم الأول للسلسلة، الاسم الأخير للسلسلة، العمر الحقيقي) {}
تسجيل الحساب (العميل، عنوان العنوان) {}
العميل العميل = العميل الجديد("John", "Doe", 25);
عنوان العنوان = العنوان الجديد ("123 الشارع الرئيسي"، "المدينة"، "الولاية")؛
حساب الحساب = حساب جديد (العميل، العنوان)؛
if (مثيل الحساب للحساب(Customer(fName, lName, age), Address(street, city, State))) {
System.out.println("الاسم الأول: "fName); // جون
System.out.println("الاسم الأخير:" lName); // ظبية
System.out.println("العمر: "age); // 25
System.out.println("العنوان: "شارع"، "مدينة"، "ولاية)؛ // 123 الشارع الرئيسي، المدينة، الولاية
في هذا المثال، نستخدم نمطين متداخلين لاستخراج القيم من حقلي "العميل" و"العنوان" في سجل "الحساب".
6. مطابقة المكونات
تسمح أنماط السجلات بمزيد من المرونة حيث لا يلزم أن تتطابق متغيرات الأنماط مع أسماء مكونات السجل. وطالما أنها متوافقة، فإن مطابقة النمط ستكون ناجحة. على سبيل المثال:
سجل العميل (الاسم الأول للسلسلة، الاسم الأخير للسلسلة، العمر int) {}
تسجيل الحساب (العميل، عنوان العنوان) {}
العميل العميل = العميل الجديد("John", "Doe", 25);
if (مثيل العميل للعميل (var fn، var ln، var age)) {
System.out.println("الاسم الأول:" fn); // جون
System.out.println("الاسم الأخير:" ln); // ظبية
System.out.println("العمر: "age); // 25
// الوصول إلى مكونات السجل المتداخلة
حساب الحساب = حساب جديد(العميل، العنوان الجديد("123 Main St"، "New York"، "NY"));
إذا (مثيل الحساب للحساب (var cust، var Address)) {
System.out.println("العميل: "cust); // العميل [الاسم الأول = جون، الاسم الأخير = ظبية، العمر = 25]
System.out.println("العنوان: "عنوان); // العنوان[street=123 Main St, city=New York,state=NY]
هنا، تختلف متغيرات النمط "fn" و"ln" عن أسماء المكونات المقابلة لـ "fName" و"lName" في سجل "Customer". وهذا يجعل أنماط السجلات أكثر مرونة ويتجنب أي تعارضات محتملة مع أسماء المتغيرات.
7. خاتمة
في الختام، توفر أنماط سجلات Java طريقة ملائمة لتفكيك السجلات واستخراج القيم منها. إنها تجعل التعليمات البرمجية أكثر إيجازًا ونظيفًا وقابلة للقراءة أثناء التعامل مع مطابقة الأنماط في عبارات المثيل والتبديل. تسمح أنماط السجلات، جنبًا إلى جنب مع أدوات تدمير السجلات، بمعالجة أكثر قوة للسجلات المعقدة. بشكل عام، تعمل هذه الميزة على تحسين استخدام السجلات كحاملات للبيانات وتجعل برمجة Java أكثر متعة.
يمكن للمطورين اكتشاف المزيد من ميزات Java 21 من خلال الدراسة لامتحان SE 21 Developer Certified Professional باستخدام اختبارات التدريب 1Z0-830 الخاصة بـ MyExamCloud.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3