Lambdas والدوال عالية الرتبة
مرّر السلوك بوصفه قيمًا
Lambdas والدوال عالية الرتبة درس مجاني في Android Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Android Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Android Academy 4 دروس في المجموع.
ما هي Lambda؟
إن lambda دالة صغيرة يمكنك كتابتها مباشرةً دون منحها اسمًا.
تضعها بين قوسين معقوفين: { x -> x + 1 }. وتتيح لك Lambdas تمرير السلوك كما تمرّر البيانات.
لقد استخدمتها مسبقًا مع map وfilter.
تخزين Lambda في متغير
إن lambda قيمة، لذا يمكنك تخزينها في متغير واستدعاؤها لاحقًا.
استدعها كما تستدعي دالة، باستخدام الأقواس.
fun main() {
val square = { x: Int -> x * x }
println(square(5))
println(square(3))
}الاختصار it
عندما تستقبل lambda معاملًا واحدًا بالضبط، يمكنك تخطي تسميته واستخدام it.
يساعد ذلك في إبقاء Lambdas القصيرة موجزة وسهلة القراءة.
fun main() {
val nums = listOf(1, 2, 3, 4)
val big = nums.filter { it > 2 }
println(big)
}معاملات متعددة
يمكن أن تستقبل lambda أكثر من معامل واحد، مع فصل المعاملات بفواصل قبل السهم.
يكون التعبير الأخير في lambda هو القيمة التي تعيدها.
fun main() {
val add = { a: Int, b: Int -> a + b }
println(add(4, 6))
}الدوال من الرتبة العليا
إن الدالة من الرتبة العليا هي دالة تستقبل دالة أخرى كمعامل أو تعيد دالة.
يعني نوع الدالة (Int) -> Int «تستقبل Int وتعيد Int». وهذه هي الطريقة التي تعمل بها map وfilter.
كتابة دالة من الرتبة العليا
نعرّف هنا applyTwice، التي تقبل دالة وتنفّذها مرتين.
نوع المعامل op هو (Int) -> Int.
fun applyTwice(x: Int, op: (Int) -> Int): Int {
return op(op(x))
}
fun main() {
println(applyTwice(3) { it + 1 })
}صيغة Lambda اللاحقة
عندما تكون lambda هي المعامل الأخير، يمكنك نقلها إلى خارج الأقواس.
لهذا تبدو list.filter { ... } مرتبة وواضحة. الصيغتان أدناه متكافئتان.
fun main() {
val nums = listOf(1, 2, 3)
println(nums.map({ it * 2 }))
println(nums.map { it * 2 })
}تمرير الدوال المُسمّاة
يمكنك تمرير دالة مُسمّاة موجودة مسبقًا حيث يُتوقع وجود lambda، باستخدام ::، ويُسمى ذلك مرجع دالة.
وبذلك تتجنب إعادة كتابة المنطق على شكل lambda.
fun isOdd(n: Int) = n % 2 == 1
fun main() {
val nums = listOf(1, 2, 3, 4)
println(nums.filter(::isOdd))
}إعادة دالة
يمكن للدالة من الرتبة العليا أن تعيد دالة أيضًا. تبني multiplier هنا lambda مخصّصة للضرب.
وهذا شكل بسيط من أشكال الإعداد.
fun multiplier(factor: Int): (Int) -> Int {
return { it * factor }
}
fun main() {
val triple = multiplier(3)
println(triple(5))
}تلتقط Lambdas المتغيرات
يمكن لـ lambda قراءة المتغيرات من النطاق المحيط. ويُسمى ذلك الإغلاق.
تتذكر lambda هنا bonus حتى بعد تمريرها إلى مكان آخر.
fun main() {
val bonus = 10
val nums = listOf(1, 2, 3)
println(nums.map { it + bonus })
}أهمية Lambdas في Android
في Android، تعبّر Lambdas عن الاستدعاءات الراجعة بطريقة واضحة. فمستمع النقر على زر ليس سوى lambda تمرّرها إلى إطار العمل.
على سبيل المثال: button.setOnClickListener { showMenu() } ينفّذ التعليمات البرمجية عند النقر.
تحقق سريع
اختبر مدى فهمك لـ Lambdas والدوال من الرتبة العليا.
مراجعة
إن Lambdas دوال مضمّنة غير مُسمّاة، تُكتب بين أقواس معقوفة، وتستخدم it لمعامل واحد.
تستقبل الدوال من الرتبة العليا الدوال أو تعيدها، مما يتيح إنشاء استدعاءات راجعة واضحة وعمليات قابلة لإعادة الاستخدام مثل map وfilter.
الأسئلة الشائعة
هل درس «Lambdas والدوال عالية الرتبة» مجاني؟
نعم — نص درس «Lambdas والدوال عالية الرتبة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Android Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Android Academy 4 دروس في المجموع.
ماذا ستتعلم في «Lambdas والدوال عالية الرتبة»؟
مرّر السلوك بوصفه قيمًا تتمرن على Android Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Android Academy؟
لا تُشترط خبرة سابقة. Android Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «Lambdas والدوال عالية الرتبة»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Android Academy هذا؟
نعم. كل درس في Android Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- القوائم والقوائم القابلة للتغيير
- الخرائط والمجموعات
- map وfilter وforEach
- Lambdas والدوال عالية الرتبة