الاستدعاءات الآمنة وElvis
عاملا التشغيل ?. و:?
الاستدعاءات الآمنة وElvis درس مجاني في Android Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Android Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Android Academy 4 دروس في المجموع.
ما بعد فحوصات if
ينجح التحقق من كل قيمة قابلة للخلو باستخدام if، لكنه يصبح مطولًا بسرعة. توفّر Kotlin عوامل مختصرة مخصّصة للتعامل مع الخلو.
يغطي هذا الدرس عامل الاستدعاء الآمن ?. وعامل Elvis ?:، وهما أداتان ستستخدمهما باستمرار.
عامل الاستدعاء الآمن
يستدعي العامل ?. دالة فقط إذا لم تكن القيمة خالية. وإذا كانت خالية، تُقيَّم العبارة بأكملها إلى null بدلًا من التسبب في عطل.
إنه اختصار آمن لنمط التحقق من عدم الخلو.
fun main() {
val name: String? = "Coddy"
println(name?.length)
}الاستدعاء الآمن مع null
عندما تكون القيمة المستقبِلة خالية، يتوقف الاستدعاء الآمن مبكرًا ويعيد null. ولا يُطرح أي استثناء.
تكون النتيجة المطبوعة هنا هي الكلمة null، وليست عطلًا.
fun main() {
val name: String? = null
println(name?.length) // prints: null
}تسلسل الاستدعاءات الآمنة
يمكنك تسلسل ?. عبر عدة خطوات. فإذا كانت أي حلقة خالية، يتوقف التسلسل بأكمله ويعطي null.
وهذا مثالي للتنقل بين البيانات الاختيارية المتداخلة.
class Address(val city: String?)
class User(val address: Address?)
fun cityOf(u: User?): String? {
return u?.address?.city
}عامل Elvis
يوفّر عامل Elvis ?: قيمة بديلة عندما يكون الجانب الأيسر خاليًا. وقد سُمّي بهذا الاسم نسبةً إلى تسريحة شعر المغني، التي يشبهها الرمز.
اقرأه هكذا: استخدم القيمة اليسرى، وإلا فاستخدم القيمة اليمنى.
fun main() {
val name: String? = null
val shown = name ?: "Guest"
println(shown) // prints: Guest
}استخدام Elvis مع الاستدعاءات الآمنة
يعمل الاستدعاء الآمن وElvis معًا بانسجام. استخدم ?. للوصول إلى قيمة، و?: لتوفير قيمة افتراضية إذا كانت أي قيمة خالية.
يحوّل هذا النمط نتيجة قابلة للخلو إلى نتيجة مضمونة بأنها غير خالية.
fun main() {
val name: String? = null
val len: Int = name?.length ?: 0
println(len) // prints: 0
}مثال على الطول الافتراضي
نوع النتيجة هنا هو Int عادي، وليس Int?. أزال عامل Elvis قابلية النتيجة للخلو.
بعد استخدام ?: مع قيمة بديلة غير خالية، يعرف المترجم أن القيمة لا يمكن أن تكون خالية أبدًا.
val title: String? = "Kotlin"
val length: Int = title?.length ?: 0
// length is a non-null Intاستخدام Elvis للإرجاع المبكر
بما أن return وthrow تعبيران في Kotlin، يمكنك وضعهما على يمين Elvis.
وهذه طريقة واضحة للخروج مبكرًا عندما تكون قيمة مطلوبة مفقودة.
fun process(input: String?) {
val text = input ?: return
println(text.uppercase())
}الاستدعاء الآمن مع let
اجمع بين ?. وlet لتنفيذ كتلة فقط عندما لا تكون القيمة خالية. داخل الكتلة، تكون القيمة غير خالية ويُشار إليها باسم it.
وهذا أسلوب شائع لتنفيذ إجراء على القيم الاختيارية.
fun main() {
val email: String? = "a@b.com"
email?.let {
println("Sending to " + it)
}
}جمع المفاهيم معًا
يمكن لبرنامج قصير أن يوضح تعاون الاستدعاء الآمن وElvis لإنتاج رسالة ودية.
لاحظ عدم الحاجة إلى عبارة if، مع أن التعليمات البرمجية لا تتعرض لخطر التعطل بسبب null.
fun main() {
val nickname: String? = null
val display = nickname?.uppercase() ?: "ANONYMOUS"
println(display)
}متى تستخدم كل واحد منهما
استخدم ?. عندما تريد أن تمر نتيجة خالية دون ضرر. واستخدم ?: عندما تريد استبدال null بقيمة افتراضية محددة.
يغطي استخدامهما معًا الغالبية العظمى من حالات التعامل اليومية مع الخلو، دون فحوصات مطولة.
val count = list?.size ?: 0
// safe call reads size, Elvis defaults to 0تحقق سريع
اختبر مدى فهمك للاستدعاءات الآمنة وعامل Elvis.
مراجعة
يستدعي الاستدعاء الآمن ?. عضوًا فقط إذا لم تكن القيمة المستقبِلة خالية، وإلا فإنه يعطي null. ويستبدل عامل Elvis ?: القيمة الخالية بقيمة بديلة.
يؤدي تسلسلهما إلى إزالة قابلية الخلو بطريقة واضحة. وستستكشف لاحقًا دوال النطاق مثل let وalso بمزيد من التفصيل.
الأسئلة الشائعة
هل درس «الاستدعاءات الآمنة وElvis» مجاني؟
نعم — نص درس «الاستدعاءات الآمنة وElvis» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Android Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Android Academy 4 دروس في المجموع.
ماذا ستتعلم في «الاستدعاءات الآمنة وElvis»؟
عاملا التشغيل ?. و:? تتمرن على Android Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Android Academy؟
لا تُشترط خبرة سابقة. Android Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «الاستدعاءات الآمنة وElvis»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Android Academy هذا؟
نعم. كل درس في Android Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- الأنواع القابلة للقيمة الفارغة وغير القابلة لها
- الاستدعاءات الآمنة وElvis
- let وalso ودوال النطاق
- تجنّب NullPointerExceptions