"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > استكشاف قوة مطابقة الأنماط باستخدام Switch في Java 21

استكشاف قوة مطابقة الأنماط باستخدام Switch في Java 21

تم النشر بتاريخ 2024-08-17
تصفح:388

Exploring the Power of Pattern Matching with Switch in Java 21

إحدى حالات الاستخدام الشائعة لمطابقة الأنماط مع المحول هي عند العمل مع أنواع مختلفة من البيانات في البرنامج. خذ بعين الاعتبار المثال التالي لفئة WeatherStation التي تحتوي على أنواع مختلفة من أجهزة الاستشعار وتقوم بإرجاع درجة الحرارة الحالية:

`الطبقة العامة WeatherStation {

private Sensor sensor;

 public double getCurrentTemperature() {
    return switch (sensor) {
        case TemperatureSensor t -> t.reading();
        case HumiditySensor h -> h.reading() * 0.9; // apply a 10% moisture correction
        default -> 0.0; // in case of an unhandled sensor type, return 0
    };
}

}
`
هنا، يمكننا أن نرى أنه يتم استخدام واجهة المستشعر لتعبير المحدد، وتستخدم تسميات الحالة أنماطًا تعتمد على تطبيقات مستشعر محددة: مستشعر درجة الحرارة ومستشعر الرطوبة. يتيح ذلك طريقة أكثر إيجازًا وقابلية للقراءة للتعامل مع أنواع مختلفة من البيانات في بيان التبديل.

حالة استخدام أخرى لمطابقة النمط مع المفتاح هي عند التعامل مع التعدادات. قبل تقديم مطابقة الأنماط، كان من الممكن استخدام التعدادات فقط كثوابت في تسميات الحالة، مما أدى إلى تقييد القيم التي يمكن اختبارها في بيان التبديل. باستخدام الميزة الجديدة، يمكن الآن تأهيل التعدادات في تسميات الحالة، مما يسمح بمطابقة أكثر دقة ومرونة.

اتجاه التعداد العام {
شمال،
شرق،
جنوب،
الغرب


نقل الفراغ العام (اتجاه الاتجاه) {
التبديل (الاتجاه) {
الحالة NORTH،NORTH_WEST،NORTH_EAST -> moveUp();
الحالة EAST,EAST_NORTH,EAST_SOUTH -> moveRight();
الحالة SOUTH,SOUTH_EAST,SOUTH_WEST -> moveDown();
الحالة WEST،WEST_NORTH،WEST_SOUTH -> moveLeft();



هنا، تستخدم طريقة move() بيان التبديل للتعامل بسهولة مع التحرك في اتجاهات مختلفة بناءً على قيمة تعداد الاتجاه المحدد. من خلال مطابقة الأنماط، يمكننا أيضًا تحديد مجموعات الاتجاه، مثل NORTH_WEST وEAST_SOUTH، مما يجعل الكود الخاص بنا أكثر قوة ومرونة.

أخيرًا، دعونا نلقي نظرة على مثال لكيفية مساعدة مطابقة الأنماط في معالجة الأخطاء في عبارة التبديل. في المحول التقليدي، إذا كان تعبير المحدد لا يتطابق مع أي من تسميات الحالة، فيمكن استخدام حالة افتراضية لمعالجة الخطأ. ومع ذلك، قد يكون هذا أمرًا شاقًا عند التعامل مع تسميات حالة متعددة ويمكن أن يؤدي إلى تكرار التعليمات البرمجية. في مطابقة النمط، يتم طرح استثناء إذا لم يتطابق أي من أنماط تسمية الحالة مع تعبير المحدد، مما يجعل معالجة الأخطاء أكثر اتساقًا وأقل عرضة للخطأ.

سلسلة عامة getPlanetaryObject(PlanetaryBody body) {
مفتاح العودة (الجسم) {
حالة الكوكب p && p.getMass() > 1e29 -> p.getName() " عملاق غازي";
حالة الكوكب p && p.getMass() > 1e23 -> p.getName() " كوكب صخري";
case Star s && s.getLuminosity() > 1e32 -> s.getName() " نجم ساطع";
case Star s && s.getLuminosity() s.getName() " نجم خافت";
الافتراضي -> طرح MatchException جديد("غير قادر على تحديد نوع الكائن الكوكبي:" body.getName());
};

في هذا المثال، تأخذ طريقة getPlanetaryObject() كائن PlanetaryBody، والذي يمكن أن يكون إما كوكبًا أو نجمًا. تأخذ الأنماط المستخدمة في تسميات الحالة شروطًا إضافية، مثل كتلة الكوكب أو لمعان النجم. إذا لم يتطابق أي من الأنماط، فسيتم طرح MatchException، مما يجعل معالجة الأخطاء أكثر اتساقًا ويمنع أي أخطاء محتملة.

خاتمة
تعد مطابقة الأنماط للمحول إحدى أهم الميزات التي تم تقديمها في Java في الآونة الأخيرة. فهو يسمح بهياكل تحكم أكثر مرونة ودقة في التدفق.

قم بترقية مهاراتك في Java من خلال الحصول على شهادة Java SE 21 Professional Certified Developer.

بيان الافراج تم إعادة نشر هذه المقالة على: https://dev.to/myexamcloud/exploring-the-power-of-pattern-matching-with-switch-in-java-21-506a?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ Study_golang @163.com حذف
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3