0%
مطابقة الأنماط: وداعًا لـ instanceof والتحويل القسري للأنواع

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

instanceof مع متغير، وswitch على الأنواع، وأنماط السجلات والحراس.

10-15 دقيقة

مطابقة الأنماط: وداعًا لـ instanceof والتحويل القسري للأنواع

تحتوي كل قاعدة شيفرة بلغة Java 8 على هذا التسلسل، وغالبًا مئات المرات: تعليمة instanceof، ثم قوس مفتوح، ثم تحويل قسري (cast) إلى النوع الذي اختبرناه للتو، ثم متغير محلي سُمّي على عجل. ثلاثة أسطر لفكرة واحدة. التكرار هنا آلي، ولذلك لا يلفت الانتباه، وهذا بالضبط ما يجعله خطيرًا: ففي اليوم الذي تنسخ فيه فرع Cercle لتكتب فرع Rectangle وتنسى تغيير التحويل القسري، ستحصل على ClassCastException أثناء التنفيذ في شيفرة اجتازت المراجعة.

تزيل مطابقة الأنماط هذا التكرار بدمج الاختبار والاستخراج في خطوة واحدة. لم تعد تقول «إذا كان دائرة، فعامله كدائرة»، بل تقول «إذا كانت هذه القيمة على شكل دائرة نصف قطرها r». يختفي التحويل القسري من الشيفرة المصدرية، وبذلك يختفي خطأ التحويل من احتمالاتك. وعند دمجها مع السجلات (records) والفئات المختومة (sealed classes) اللتين تناولناهما سابقًا، تذهب الآلية أبعد من ذلك: إذ تتيح للمترجم أن يرفض أي معالجة ناقصة.

instanceof مع نمط نوع

هذه هي الإضافة الأسرع مردودًا، وهي متاحة منذ Java 16.

// Java 8
if (objet instanceof String) {
    String texte = (String) objet;
    if (texte.length() > 3) {
        return texte.toUpperCase();
    }
}

التعليقات

التعليقات مدعومة عبر GitHub Discussions

سجّل الدخول باستخدام GitHub للمشاركة في النقاش

تم نسخ الرابط!