Kotlin

فحص نوع وقت التشغيل في كوتلن

Spread the love

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

محتويات الجدول

استخدام كلمة المفتاح is

توفر كلمة المفتاح is النهج الأكثر مباشرة وفعالية للتحقق من نوع وقت التشغيل. فهي تُرجع true إذا كان المتغير من النوع المحدد أو نوع فرعي منه، و false بخلاف ذلك. هذا يُسهّل المنطق الشرطي بناءً على نوع المتغير.


fun checkTypeWithIs(variable: Any) {
    when (variable) {
        is String -> println("المتغير هو سلسلة نصية: $variable")
        is Int -> println("المتغير هو عدد صحيح: $variable")
        is Double -> println("المتغير هو عدد عشري: $variable")
        else -> println("المتغير من نوع غير معروف: ${variable?.javaClass?.name ?: "null"}")
    }
}

fun main() {
    val myString = "Hello, Kotlin!"
    val myInt = 10
    val myDouble = 3.14
    val myNull: String? = null

    checkTypeWithIs(myString) // الإخراج: المتغير هو سلسلة نصية: Hello, Kotlin!
    checkTypeWithIs(myInt)    // الإخراج: المتغير هو عدد صحيح: 10
    checkTypeWithIs(myDouble) // الإخراج: المتغير هو عدد عشري: 3.14
    checkTypeWithIs(myNull)   // الإخراج: المتغير من نوع غير معروف: null
}

يستخدم هذا المثال المحسّن تعبير when لكتابة أكثر وضوحًا ويعالج قيم null بشكل أنيق. ومن المهم أن عمليات الإرسال الذكية في Kotlin تلغي الحاجة إلى الإرسال الصريح داخل فروع when. بعد التحقق الناجح من is، يتم التعامل مع المتغير تلقائيًا على أنه النوع الذي تم التحقق منه.

استخدام خاصية qualifiedName

توفر هذه الطريقة نهجًا برمجيًا أكثر، وهو مثالي عندما تحتاج إلى اسم النوع كسلسلة نصية. فهي تستخدم خاصية ::class وخاصية qualifiedName من مثيل KClass الناتج.


fun checkTypeWithQualifiedName(variable: Any) {
    val typeName = variable::class.qualifiedName ?: "نوع غير معروف"
    println("نوع المتغير هو: $typeName")
}

fun main() {
    val myString = "Hello, Kotlin!"
    val myInt = 10
    val myList = listOf(1, 2, 3)
    val myNull: String? = null

    checkTypeWithQualifiedName(myString) // الإخراج: نوع المتغير هو: kotlin.String
    checkTypeWithQualifiedName(myInt)    // الإخراج: نوع المتغير هو: kotlin.Int
    checkTypeWithQualifiedName(myList)   // الإخراج: نوع المتغير هو: kotlin.collections.List
    checkTypeWithQualifiedName(myNull)   // الإخراج: نوع المتغير هو: kotlin.String
}

يشمل هذا المثال المُحسّن سلامة قيم null باستخدام عامل Elvis (?:) للتعامل مع قيم null المحتملة بشكل أكثر قوة. يتم إرجاع الاسم المؤهل بالكامل، وهو مفيد للتسجيل أو تصحيح الأخطاء أو معالجة الأنواع الديناميكية بناءً على التمثيل النصي. ومع ذلك، بالنسبة للتحقق من الأنواع البسيطة، تظل كلمة المفتاح is أكثر كفاءة.

باختصار، توفر كلتا الطريقتين طرقًا قيّمة لتحديد نوع المتغير وقت التشغيل. تتميز كلمة المفتاح is في المنطق الشرطي، بينما تتألق qualifiedName في السيناريوهات البرمجية التي تتطلب أسماء الأنواع كسلاسل نصية. يعتمد اختيار الطريقة الصحيحة على احتياجات تطبيقك المحددة.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *