تخطَّ إلى المحتوى

is / as / as?

فحص الأنواع والتحويل is / as / as?

is تفحص النوع مع تحويل ذكي تلقائي، وas تحوّل صراحة وقد ترمي استثناءً، وas? تحوّل بأمان وتُرجع null عند الفشل.

is (وعكسها !is) تفحص إن كان كائن من نوع معيّن؛ بعد فحص ناجح يطبّق المترجم smart cast تلقائيًّا فيسمح باستخدام المتغيّر كأنه من النوع الجديد دون تحويل يدوي. يعمل هذا فقط عندما يضمن المترجم عدم تغيّر القيمة بين الفحص والاستخدام (val محلية أو خاصة عادة، وليس var قابلة للتغيير).

للتحويل الصريح: as يرمي ClassCastException إذا فشل التحويل، بينما as? يُرجع null بدلًا من الاستثناء — الخيار الأكثر أمانًا.

الصياغة

قيمة is نوع
قيمة as نوع
قيمة as? نوع

📄 مثال

fun describe(x: Any): String {
    if (x is String) {
        return "نص طوله ${x.length}"   // smart cast تلقائي، بلا تحويل يدوي
    }
    return "نوع آخر"
}

val raw: Any = "42"
val safe = raw as? Int      // null لأن raw ليست Int
val unsafe = raw as String  // ينجح لأن raw فعلًا String

أهم النقاط

العنصرالوظيفة
is / !isفحص النوع، ويُفعّل smart cast تلقائيًّا عند النجاح
asتحويل صريح غير آمن — يرمي ClassCastException عند الفشل
as?تحويل صريح آمن — يُرجع null بدل استثناء عند الفشل

💡 نصائح عملية

  • اجمع as? مع عامل إلفيس: (x as? Int) ?: -1 لتوفير قيمة افتراضية عند فشل التحويل
  • smart cast لا يعمل على var قابلة للتغيير من مكان آخر (مثل خاصية عامة) — استخدم تحويلًا يدويًّا هناك

⚠️ أخطاء شائعة

  • استخدام as مباشرة على بيانات مصدرها غير موثوق (مثل JSON) بدل as? الأكثر أمانًا
  • توقّع smart cast تلقائي على var عامة — يتطلّب الأمر val أو var محلية غير معدَّلة بين الفحص والاستخدام

خصائص ذات صلة

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار KOTLIN الكامل بالعربي.