let وalso ودوال النطاق
اعمل مع القيم القابلة للقيمة الفارغة
let وalso ودوال النطاق درس مجاني في Android Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Android Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Android Academy 4 دروس في المجموع.
ما هي دوال النطاق؟
تتيح لك دوال النطاق تشغيل كتلة من التعليمات البرمجية في سياق كائن. وتجعل التعليمات البرمجية أكثر اختصارًا، خصوصًا عند التعامل مع القيم التي تقبل null.
يركز هذا الدرس على let وalso، وهما الدالتان الأكثر فائدة لأمان التعامل مع null، وعلى علاقتهما بمعامل الاستدعاء الآمن.
دالة let
تشغّل let كتلةً من التعليمات البرمجية وتمرر الكائن إليها باسم it. وتُرجع كل ما تُرجعه الكتلة.
وتفيد في تحويل قيمة أو تحديد نطاق اسم مؤقت.
fun main() {
val length = "Kotlin".let { it.length }
println(length) // prints: 6
}استخدام let لأمان التعامل مع null
اجمع بين ?. وlet لتنفيذ كتلة فقط عندما لا تكون القيمة null. تُشغَّل الكتلة مرة واحدة، مع تمرير القيمة إليها باسم it.
إذا كانت القيمة null، يتم تخطي الكتلة بالكامل.
fun main() {
val name: String? = "Ada"
name?.let {
println("Hello, " + it)
}
}التخطي عند وجود null
عندما يكون الكائن المستقبِل null، لا ينفذ ?.let أي شيء. ولا تُنفَّذ الكتلة مطلقًا.
لا يطبع هذا البرنامج شيئًا لأن name يساوي null.
fun main() {
val name: String? = null
name?.let {
println("Hello, " + it)
}
}إعادة تسمية it
يمكنك منح المعامل اسمًا أوضح بدلًا من it. وهذا يحسن قابلية القراءة في الكتل الأطول.
استخدم سهمًا لتسمية المعامل صراحةً.
val name: String? = "Bo"
name?.let { value ->
println(value.uppercase())
}دالة also
تمرر also الكائن أيضًا باسم it، لكنها تُرجع الكائن الأصلي بدلًا من نتيجة الكتلة.
وهي مناسبة جدًا للآثار الجانبية مثل التسجيل، مع إبقاء القيمة دون تغيير ضمن سلسلة الاستدعاءات.
fun main() {
val n = 5.also { println("got " + it) }
println(n) // prints: 5
}القيمة المُرجعة: let مقابل also
يكمن الفرق الأساسي في أن let تُرجع نتيجة الكتلة، بينما تُرجع also الكائن الأصلي.
اختر let للتحويل، وalso للاطلاع على القيمة دون تغييرها.
val a = "hi".let { it.length } // a = 2 (Int)
val b = "hi".also { it.length } // b = "hi" (String)استخدام also للتسجيل
بما أن also تُرجع الكائن، فيمكن إدراجها ضمن سلسلة الاستدعاءات لفحص قيمة في منتصف تدفق التنفيذ.
نسجل هنا قيمة قد تكون null فقط إذا كانت موجودة، ثم نواصل استخدامها.
fun main() {
val token: String? = "abc"
val result = token?.also { println("token: " + it) }
println(result)
}استخدام let مع Elvis
استخدم ?.let مع معامل Elvis لتوفير بديل عندما تكون القيمة null.
تنتج الكتلة نتيجةً عند وجود القيمة، بينما يتولى جانب Elvis معالجة حالة null.
fun main() {
val raw: String? = null
val out = raw?.let { it.trim() } ?: "empty"
println(out) // prints: empty
}اختيار دالة النطاق
لأمان التعامل مع null، استخدم let عندما تريد تحويل قيمة غير null أو استخدامها داخل كتلة. واستخدم also عندما تريد تنفيذ أثر جانبي مع ضرورة الإبقاء على الكائن الأصلي.
يتوافق كلاهما طبيعيًا مع معامل الاستدعاء الآمن لتجنب الأعطال الناتجة عن null.
user?.let { save(it) } // transform/use
user?.also { log(it) } // side effect, keep userمثال جامع
يستخدم هذا البرنامج ?.let لإنشاء رسالة، ويستخدم Elvis لتوفير قيمة بديلة. ويوضح الأسلوب اليومي للتعامل الآمن مع null في Kotlin.
لا تظهر أي عمليات تحقق صريحة من null، ومع ذلك فالبرنامج آمن بالكامل.
fun main() {
val city: String? = "Goreme"
val label = city?.let { "City: " + it } ?: "Unknown"
println(label)
}تحقق سريع
اختبر مدى فهمك لـ let وalso.
مراجعة
تشغّل دوال النطاق كتلةً في سياق كائن. تمرر let الكائن باسم it وتُرجع نتيجة الكتلة؛ أما also فتمرر it وتُرجع الكائن الأصلي.
باستخدام ?.let، يمكنك التعامل مع قيمة فقط عندما لا تكون null. ستجمع في الخطوة التالية هذه الأفكار لتجنب NullPointerExceptions تمامًا.
الأسئلة الشائعة
هل درس «let وalso ودوال النطاق» مجاني؟
نعم — نص درس «let وalso ودوال النطاق» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Android Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Android Academy 4 دروس في المجموع.
ماذا ستتعلم في «let وalso ودوال النطاق»؟
اعمل مع القيم القابلة للقيمة الفارغة تتمرن على Android Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Android Academy؟
لا تُشترط خبرة سابقة. Android Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «let وalso ودوال النطاق»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Android Academy هذا؟
نعم. كل درس في Android Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- الأنواع القابلة للقيمة الفارغة وغير القابلة لها
- الاستدعاءات الآمنة وElvis
- let وalso ودوال النطاق
- تجنّب NullPointerExceptions