0Pricing
Android Academy · درس

أمان القيم الفارغة

افهم نظام أمان القيم الفارغة في Kotlin: الأنواع القابلة للقيمة الفارغة، وعامل الاستدعاء الآمن، وعامل Elvis، وكيفية التخلص من NullPointerExceptions.

أمان القيم الفارغة درس مجاني في Android Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Android Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Android Academy 4 دروس في المجموع.

الخطأ الذي تكلّف مليار دولار

في Java، يمكن أن تكون قيمة أي متغيّر null، مما يسبب NullPointerException (NPE) أثناء التشغيل — وهو أحد أكثر أسباب التعطّل شيوعًا في تطبيقات Android.

أطلق Tony Hoare، مخترع null، على ذلك اسم الخطأ الذي تكلّف مليار دولار.

تقضي Kotlin على أخطاء NPE وقت الترجمة باستخدام نظام أمان null.

القيم القابلة لـnull وغير القابلة لها

في Kotlin، تكون الأنواع غير قابلة لـnull افتراضيًا. للسماح بالقيمة null، أضيفوا ? إلى النوع:

  • String — لا تكون null مطلقًا، وهذا مضمون
  • String? — يمكن أن تكون null

يفرض المترجم ذلك — فلن يسمح لكم بإسناد null إلى نوع غير قابل لـnull.

مثال على الأنواع القابلة لـnull

يكتشف المترجم أخطاء null قبل تشغيل التطبيق:

fun main() {
    val name: String = "Alice"   // never null
    // name = null  // COMPILE ERROR

    var nickname: String? = "Al"  // nullable
    nickname = null               // OK

    println(name)
    println(nickname)  // null
}

عامل الاستدعاء الآمن ?.

يستدعي عامل الاستدعاء الآمن ?. دالةً فقط إذا لم يكن الكائن null. وإذا كان null، يُعيد null بدلًا من التسبّب في تعطّل البرنامج.

nickname?.length → يُعيد الطول، أو null إذا كانت nickname تساوي null.

الاستدعاءات الآمنة أثناء العمل

استخدموا ?. للوصول بأمان إلى الخصائص القابلة لـnull:

fun main() {
    var text: String? = "Hello"
    println(text?.length)   // 5
    println(text?.uppercase()) // HELLO

    text = null
    println(text?.length)   // null (no crash!)
    println(text?.uppercase()) // null
}

عامل Elvis ?:

يوفّر عامل Elvis ?: قيمةً افتراضية عندما يكون التعبير null:

val len = text?.length ?: 0

اقرؤوه هكذا: "طول text، أو 0 إذا كانت text تساوي null".

سُمّي نسبةً إلى رمز Elvis التعبيري 🕺، إذ يشبه شعره ?:.

مثال على عامل Elvis

وفّروا قيمًا افتراضية آمنة باستخدام ?::

fun main() {
    var name: String? = "Bob"
    println(name?.length ?: 0)  // 3

    name = null
    println(name?.length ?: 0)  // 0

    val display = name ?: "Anonymous"
    println(display)  // Anonymous
}

التحقّق من null باستخدام if

داخل كتلة if (x != null)، تحوّل Kotlin النوع القابل لـnull تلقائيًا إلى نوع غير قابل لـnull باستخدام التحويل الذكي للنوع — ولا حاجة إلى استخدام ?. داخل الكتلة.

مثال على التحويل الذكي للنوع

تضيّق Kotlin النوع بعد التحقّق من null:

fun printLength(text: String?) {
    if (text != null) {
        // 'text' is now String (non-nullable) here
        println("Length: ${text.length}") // no ?. needed
    } else {
        println("text is null")
    }
}

fun main() {
    printLength("Kotlin")  // Length: 6
    printLength(null)       // text is null
}

اختبار سريع

إلى ماذا تُقيَّم null?.length ?: -1؟

مراجعة: أمان null

يقضي نظام أمان null في Kotlin على أخطاء NPE:

  • الأنواع غير قابلة لـnull افتراضيًا؛ أضيفوا ? للسماح بـnull
  • الاستدعاء الآمن ?. — يُعيد null بدلًا من التسبّب في التعطّل
  • عامل Elvis ?: — يوفّر قيمةً افتراضية عند وجود null
  • التحويلات الذكية للنوع داخل كتل if (x != null)

التالي: تنظيم التعليمات البرمجية باستخدام الفئات والكائنات.

الأسئلة الشائعة

هل درس «أمان القيم الفارغة» مجاني؟

نعم — نص درس «أمان القيم الفارغة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Android Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Android Academy 4 دروس في المجموع.

ماذا ستتعلم في «أمان القيم الفارغة»؟

افهم نظام أمان القيم الفارغة في Kotlin: الأنواع القابلة للقيمة الفارغة، وعامل الاستدعاء الآمن، وعامل Elvis، وكيفية التخلص من NullPointerExceptions. تتمرن على Android Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Android Academy؟

لا تُشترط خبرة سابقة. Android Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «أمان القيم الفارغة»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Android Academy هذا؟

نعم. كل درس في Android Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. أمان القيم الفارغة
  2. الفئات والكائنات
  3. فئات البيانات والفئات المحصورة
  4. دوال الامتداد والدوال عالية الرتبة
← العودة إلى Android Academy