تكرار السؤال: …
الإجابة المختصرة
يفصل Kotlin بين الأنواع غير القابلة لـ null والأنواع التي تقبلها (?)، ويوفر Safe Call (?.) و Elvis Operator (?:).
الشرح
بشكل افتراضي، لا يمكن للمتغيرات حمل قيمة null إلا إذا أُضيفت علامة الاستفهام للنوع (Nullable Types). يمنع المترجم الوصول المباشر لخصائص المتغيرات القابلة لـ null دون فحص مسبق، أو باستخدام Safe Call (?.)، كما يتيح Elvis Operator (?:) تحديد قيمة بديلة أو تنفيذ return/throw عند وجود null.
مثال بالكود
var nonNullable: String = "Hello"
// nonNullable = null // خطأ وقت الترجمة
var nullable: String? = null
val length: Int = nullable?.length ?: 0 // Safe call مع Elvis operator
val safeValue = nullable ?: throw IllegalArgumentException("Value is missing")أخطاء شائعة
- الإفراط في استخدام مشغل التأكيد القطعي (!!) الذي يلغي ميزة Null Safety ويسبب NullPointerException عند الخطأ.
- تجاهل استخدام Elvis Operator للتعامل مع الحالات الفارغة بشكل نظيف والاكتفاء بفحوصات if التقليدية المتكررة.