Avatar ·

ما هو null/nil في Kotlin وكيفية التعامل معه؟

مرحبًا بالجميع! بدأت تعلم Kotlin بعد Java ولا أستطيع فهم مفهوم null في هذه اللغة بشكل كامل. في Java، null هو مرجع عادي يمكن تعيينه لأي كائن، ونحن نكافح باستمرار مع NullPointerException. في Kotlin، كما فهمت، الأنواع تكون غير قابلة للصفر (non-null) افتراضيًا، وللعمل مع null يجب استخدام تركيبات خاصة.

لدي بعض الأسئلة والمشاكل المحددة:

  1. هل فهمي صحيح أن String? (مع علامة الاستفهام) هو نوع nullable، بينما String هو non-null؟ وإذا حاولت تعيين null لمتغير من نوع String بدون علامة استفهام، فسيحدث خطأ في الترجمة؟
  2. حاولت كتابة كود بسيط لكنه لا يُترجم:
fun main() {
    val name: String? = null
    println(name.length) // خطأ: Only safe (?.) or non-null asserted (!!.) calls are allowed
}

كنت أتوقع أن يتم إلقاء استثناء أثناء التنفيذ، كما في Java.