الاستدعاء الآمن ?. وElvis ?: في الشيفرة الفعلية
سلسِل الاستدعاءات الآمنة ووفّر قيمًا بديلة باستخدام معامل Elvis.
الاستدعاء الآمن ?. وElvis ?: في الشيفرة الفعلية درس مجاني في Kotlin Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Kotlin Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Kotlin Academy 4 دروس في المجموع.
معاملان، وتأثير كبير
يستدعي الاستدعاء الآمن ?. عضوًا فقط إذا لم يكن المستقبل null. أما معامل Elvis ?: فيوفر قيمة بديلة عندما يكون الجانب الأيسر null.
أساسيات الاستدعاء الآمن
تُقيّم x?.member إلى null إذا كانت x تساوي null؛ وإلا فإنها تصل إلى member بصورة عادية.
fun main() {
val name: String? = "Kotlin"
val len: Int? = name?.length
println(len) // 6
val nope: String? = null
println(nope?.length) // null
}أساسيات معامل Elvis
تُرجع x ?: default قيمة x إذا لم تكن null، وإلا تُرجع default الموجودة على اليمين.
fun main() {
val name: String? = null
val display = name ?: "Anonymous"
println(display) // Anonymous
}دمج الاستدعاء الآمن ومعامل Elvis
نمط شائع: obj?.member ?: default — قراءة القيمة أو استخدام قيمة بديلة.
fun main() {
val name: String? = null
val length = name?.length ?: 0
println("length = $length") // 0
}تسلسل الاستدعاءات الآمنة
سلسلوا ?. عبر مستويات متعددة — فسيُختصر التعبير بأكمله إلى null إذا كانت أي وصلة تساوي null.
class Address(val city: String?)
class User(val address: Address?)
fun main() {
val u: User? = User(Address(null))
val city = u?.address?.city ?: "Unknown"
println(city) // Unknown
}طرح استثناء في الجانب الأيمن من Elvis
يمكن أن يكون الجانب الأيمن من Elvis أي تعبير، بما في ذلك throw — وهذا مفيد للتحقق من القيم المطلوبة.
fun loadConfig(path: String?): String {
val p = path ?: throw IllegalArgumentException("path required")
return "loaded $p"
}
fun main() {
println(loadConfig("/etc/app"))
// loadConfig(null) // throws
}الاستدعاء الآمن مع الدوال
تعمل الاستدعاءات الآمنة مع أي دالة، وليس مع الوصول إلى الخصائص فقط.
fun main() {
val raw: String? = " hello "
val cleaned = raw?.trim()?.uppercase() ?: ""
println(cleaned) // HELLO
}الاستدعاء الآمن في الشروط
يمكنكم استخدام الاستدعاءات الآمنة داخل الشروط. وادمجوها مع Elvis لتوفير قيم Boolean افتراضية.
fun main() {
val name: String? = "Alice"
if (name?.startsWith("A") == true) {
println("Starts with A")
}
}استخدام Elvis مع return
استخدموا Elvis مع return لإنشاء عبارات حراسة: اخرجوا مبكرًا إذا كانت قيمة مطلوبة تساوي null.
fun process(input: String?) {
val safe = input ?: return
println("processing $safe")
}
fun main() {
process("abc")
process(null) // returns silently
}استخدام Elvis مع continue وbreak
داخل الحلقات، يمكن لـ Elvis الاختصار إلى continue أو break لمعالجة null بإيجاز.
fun main() {
val items: List<String?> = listOf("a", null, "b", null, "c")
for (item in items) {
val v = item ?: continue
print("$v ")
}
println() // a b c
}تطبيق عملي: البحث عن الإعدادات
يجتمع الاستدعاء الآمن مع Elvis في سطر واحد يقرأ إعدادًا اختياريًا مع قيمة افتراضية.
class Config(val timeoutMs: Int?, val host: String?)
fun main() {
val cfg: Config? = Config(null, "prod.example.com")
val timeout = cfg?.timeoutMs ?: 5000
val host = cfg?.host ?: "localhost"
println("$host @ $timeout ms")
}تحقق سريع
إلى ماذا يُقيّم التعبير user?.email ?: "unknown" عندما تكون user تساوي null؟
مراجعة
ادمجوا بين الاستدعاء الآمن (?.) وElvis (?:) لكتابة تعليمات موجزة وآمنة مع null. واستخدموا Elvis مع throw أو return لإنشاء عبارات حراسة تخرج مبكرًا عند غياب البيانات.
الأسئلة الشائعة
هل درس «الاستدعاء الآمن ?. وElvis ?: في الشيفرة الفعلية» مجاني؟
نعم — نص درس «الاستدعاء الآمن ?. وElvis ?: في الشيفرة الفعلية» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Kotlin Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Kotlin Academy 4 دروس في المجموع.
ماذا ستتعلم في «الاستدعاء الآمن ?. وElvis ?: في الشيفرة الفعلية»؟
سلسِل الاستدعاءات الآمنة ووفّر قيمًا بديلة باستخدام معامل Elvis. تتمرن على Kotlin Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Kotlin Academy؟
لا تُشترط خبرة سابقة. Kotlin Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «الاستدعاء الآمن ?. وElvis ?: في الشيفرة الفعلية»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Kotlin Academy هذا؟
نعم. كل درس في Kotlin Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- الأنواع القابلة للقيمة null والمعدّل ?
- الاستدعاء الآمن ?. وElvis ?: في الشيفرة الفعلية
- let وalso وrun مع المستقبلات القابلة للقيمة null
- معامل !!: متى ولماذا يجب تجنّبه