let وalso وrun مع المستقبلات القابلة للقيمة null
استخدم دوال النطاق لتنفيذ الشيفرة فقط عندما لا تكون القيمة null.
let وalso وrun مع المستقبلات القابلة للقيمة null درس مجاني في Kotlin Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Kotlin Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Kotlin Academy 4 دروس في المجموع.
دوال النطاق مع القيم القابلة لـ null
تتوافق دوال النطاق let وalso وrun بصورة ممتازة مع الاستدعاء الآمن ?. لتنفيذ كتلة فقط عندما لا يكون المستقبل null.
استخدام let مع الاستدعاء الآمن
تنفّذ obj?.let { ... } الكتلة فقط إذا لم تكن obj تساوي null؛ وداخلها تشير it إلى القيمة غير القابلة لـ null.
fun main() {
val name: String? = "Kotlin"
name?.let {
println("Length: ${it.length}")
println("Upper: ${it.uppercase()}")
}
}تتجاوز let الكتلة عند وجود null
إذا كان المستقبل null، فسيتم تجاوز كتلة let بأكملها.
fun main() {
val name: String? = null
val result = name?.let {
println("never printed")
it.length
}
println(result) // null
}تُرجع let قيمة
تُرجع let آخر تعبير في كتلتها — ويمكن تسلسلها مع Elvis لتوفير قيم افتراضية.
fun main() {
val raw: String? = " hello "
val cleaned = raw?.let { it.trim().uppercase() } ?: "(empty)"
println(cleaned) // HELLO
}استخدام also للتأثيرات الجانبية
تنفّذ also كتلةً لتأثيراتها الجانبية وتُرجع المستقبل الأصلي — وهي مناسبة جدًا للتسجيل داخل مسار معالجة متسلسل.
fun main() {
val name: String? = "Alice"
val len = name?.also { println("Processing: $it") }?.length
println("len = $len")
}تحافظ also على القيمة
بخلاف let، تُرجع also المستقبل دون تغيير. استخدموها عندما تريدون إلقاء نظرة على القيمة دون تحويلها.
fun main() {
val items: List<Int>? = listOf(1, 2, 3)
items?.also { println("Got list of size ${it.size}") }
?.forEach { println(it) }
}استخدام run مع الاستدعاء الآمن
تنفّذ obj?.run { ... } الكتلة مع ربط this بالمستقبل. استخدموها عندما تريدون الوصول إلى الأعضاء دون السابقة it..
fun main() {
val name: String? = "Kotlin"
val info = name?.run {
"len=$length upper=${uppercase()}"
}
println(info)
}مقارنة let وrun
تستخدم let it (معلمة lambda)، بينما تستخدم run this (المستقبل). اختاروا الصيغة الأسهل قراءة.
class User(val name: String, val age: Int)
fun main() {
val user: User? = User("Ada", 35)
user?.let { "${it.name} age ${it.age}" }.also(::println)
user?.run { "$name age $age" }.also(::println)
}تسلسل نطاقات متعددة
سلسلوا دوال النطاق عبر مسار المعالجة لتنفيذ التحويل والتسجيل خطوةً تلو الأخرى.
fun main() {
val raw: String? = " hello "
val result = raw
?.also { println("raw: '$it'") }
?.let { it.trim() }
?.also { println("trimmed: '$it'") }
?.uppercase()
println(result) // HELLO
}استخدام let مع takeIf
ادمجوا takeIf (التصفية) مع let لتنفيذ يعتمد على دالة predicate.
fun main() {
val name: String? = "Kotlin"
name?.takeIf { it.length > 3 }
?.let { println("Long name: $it") }
}نمط مضاد: عبارات if المتداخلة
قبل استخدام دوال النطاق:
fun main() {
val name: String? = "Alice"
// OLD WAY:
if (name != null) {
val upper = name.uppercase()
println(upper)
}
// NEW WAY:
name?.let { println(it.uppercase()) }
}تحقق سريع
أي دالة نطاق تُرجع المستقبل دون تغيير وتُستخدم أساسًا للتأثيرات الجانبية؟
مراجعة
ادمجوا ?. مع let (تُرجع الكتلة قيمة وتستخدم it)، أو run (تُرجع الكتلة قيمة وتستخدم this)، أو also (تُرجع المستقبل وتُستخدم للتأثيرات الجانبية). وتتجاوز جميعها التنفيذ إذا كان المستقبل null.
الأسئلة الشائعة
هل درس «let وalso وrun مع المستقبلات القابلة للقيمة null» مجاني؟
نعم — نص درس «let وalso وrun مع المستقبلات القابلة للقيمة null» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Kotlin Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Kotlin Academy 4 دروس في المجموع.
ماذا ستتعلم في «let وalso وrun مع المستقبلات القابلة للقيمة null»؟
استخدم دوال النطاق لتنفيذ الشيفرة فقط عندما لا تكون القيمة null. تتمرن على Kotlin Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Kotlin Academy؟
لا تُشترط خبرة سابقة. Kotlin Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «let وalso وrun مع المستقبلات القابلة للقيمة null»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Kotlin Academy هذا؟
نعم. كل درس في Kotlin Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- الأنواع القابلة للقيمة null والمعدّل ?
- الاستدعاء الآمن ?. وElvis ?: في الشيفرة الفعلية
- let وalso وrun مع المستقبلات القابلة للقيمة null
- معامل !!: متى ولماذا يجب تجنّبه