English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

دليل Kotlin الأساسي

تحكم Kotlin

الوظائف في Kotlin

النصوص في Kotlin

Kotlin مبدأ البرمجة الموجهة للأ象

الصفحات المحكمة (Sealed)

في هذا المقال، ستعرف عن الفئات المغلقة (Sealed) بمساعدة الأمثلة وكيفية إنشائها واستخدامها.

عندما يكون القيمة محدودة من مجموعة محدودة (هيكل طبقي محدود) من الأنواع، سيتم استخدام الفئات المغلقة.

قبل أن نستعرض الفئات المغلقة بشكل مفصل، دعونا نستعرض المشاكل التي تحلها. لنأخذ مثالًا:

فئة Expr
فئة Const(val value: Int) : Expr
فئة Sum(val left: Expr, val right: Expr) : Expr
الوظيفة eval(e: Expr): Int =
        عندما (e) {
            القيمة الثابتة -> e.value
            المجموع -> eval(e.right) + eval(e.left)
            else ->
                throw IllegalArgumentException("تعبير غير معروف")
        }

في البرنامج المذكور أعلاه، الفئة الأساسية Expr لديها فئتان فرعيتان، Const (تمثل عددًا) و Sum (تمثل مجموع تعبيرين). هنا، يجب استخدام فرع else للتعامل مع في تعبير whenالشروط الافتراضية.

الآن، إذا قمت بإنشاء فئة فرعية جديدة من فئة Expr، لن يكتشف المطور أي شيء، لأن فرع else سيتعامل معها، مما قد يؤدي إلى خطأ. وإذا كان المطور يتلقى خطأ عند إضافة فئة فرعية جديدة، سيكون ذلك أفضل.

لحل هذه المشكلة، يمكنك استخدام الفئات المغلقة. كما ذكرنا سابقًا، تقيد الفئات المغلقة إمكانية إنشاء فئات فرعية. وإذا كنت تتعامل مع جميع الفئات الفرعية للفئة المغلقة في تعبير when، فلا تحتاج إلى استخدام فرع else.

لإنشاء فئة مغلقة، استخدم修饰ر مغلقة sealed. على سبيل المثال،

فئةExpr مغلقة

مثال: استخدام الفئات المغلقة كنموذج

هذه هي طريقة استخدام الفئات المغلقة لحل المشكلة المذكورة أعلاه:

فئةExpr مغلقة
فئة Const(val value: Int) : Expr()
فئة Sum(val left: Expr, val right: Expr) : Expr()
الجسم غير المعدود : Expr()
الوظيفة eval(e: Expr): Int =
        عندما (e) {
            القيمة الثابتة -> e.value
            المجموع -> eval(e.right) + eval(e.left)
            عدم وجود عدد -> java.lang.Double.NaN
        }

كما ترى، لا يوجد فرع else. إذا قمت بإنشاء صفحة جديدة من صفحة Expr، سيقوم محول التجميع بتقديم تقرير إذا لم يتم معالجة الصفحة في تعبير when.

عدة ملاحظات هامة

  • جميع صفحات محكمة المشار إليها يجب أن تكون مكتوبة في نفس ملف الصفحة المحكمة.

  • الصفحة المحكمة نفسها هيالصفحات الاعتبارية، لا يمكنك إنشاء كائن منها.

  • لا يمكن إنشاء محولات محكمة ليست خاصة؛ بشكل افتراضي، محولاتها هي private.

الفرق بين صفات الكائنات وصفحات المحكمة

صفات الكائناتمثل الصفحات المحكمة. مجموعة القيم في نوع المجموعات محكومة مثل الصفحات المحكمة.

الفرق الوحيد هو أن المجموعات يمكن أن يكون لديها فقط مثال واحد، بينما يمكن أن يكون لديها صفحات محكمة عدة.