0Pricing
Kotlin Academy · درس

تمرير Lambdas إلى الدوال

مرّر lambdas كوسائط واستخدم صياغة trailing lambda.

تمرير Lambdas إلى الدوال درس مجاني في Kotlin Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Kotlin Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Kotlin Academy 4 دروس في المجموع.

دوال تقبل دوال lambda

الدالة عالية الرتبة هي دالة تستقبل دالة (مثل دالة lambda) كمعلمة. هكذا تعمل map وfilter وforEach.

تعريف دالة عالية الرتبة

استخدم نوع دالة بوصفه نوع المعلمة.
fun applyTwice(n: Int, op: (Int) -> Int): Int {
    return op(op(n))
}
println(applyTwice(3, { it * 2 }))  // 12

صياغة دالة lambda اللاحقة

إذا كانت المعلمة الأخيرة دالة، يمكنك نقل دالة lambda إلى خارج القوسين. وتُسمى هذه صياغة «lambda اللاحقة».
fun applyTwice(n: Int, op: (Int) -> Int) = op(op(n))

// Standard:
applyTwice(3, { it * 2 })
// Trailing lambda:
applyTwice(3) { it * 2 }

دالة lambda اللاحقة من دون أقواس

عندما تكون دالة lambda هي الوسيط الوحيد، يمكنك حذف القوسين بالكامل.
fun execute(block: () -> Unit) = block()

// With parens:
execute({ println("Hello") })
// Without parens (idiomatic):
execute { println("Hello") }

تمرير متغير دالة lambda

يمكنك تمرير مرجع دالة lambda مخزّن باستخدام اسم المتغير الخاص به.
val double = { n: Int -> n * 2 }
fun applyTwice(n: Int, op: (Int) -> Int) = op(op(n))
println(applyTwice(5, double))  // 20

مراجع الدوال باستخدام ::

استخدم :: لتمرير دالة مسماة كوسيط متوافق مع دالة lambda.
fun triple(n: Int) = n * 3
fun applyTwice(n: Int, op: (Int) -> Int) = op(op(n))
println(applyTwice(2, ::triple))  // 18

معلمات lambda متعددة

يمكن للدالة قبول عدة معلمات من نوع lambda. ولا يمكن استخدام صيغة lambda اللاحقة إلا مع المعلمة الأخيرة.
fun transform(
    value: Int,
    before: (Int) -> Int,
    after: (Int) -> Int
) = after(before(value))

println(transform(5, { it * 2 }, { it + 1 }))  // 11

تمرير lambda إلى filter

تقبل filter دالة lambda شرطية — وهي دالة تحوّل العنصر إلى Boolean.
val numbers = listOf(1, 2, 3, 4, 5, 6)
val evens = numbers.filter { it % 2 == 0 }
println(evens)  // [2, 4, 6]

تسلسل الدوال عالية الرتبة

يمكنكم تسلسل استدعاءات عدة دوال عالية الرتبة لإنشاء مسارات معالجة بيانات واضحة ومعبّرة.
val result = (1..10)
    .filter { it % 2 != 0 }  // odds
    .map { it * it }          // square
    .take(3)                  // first 3
println(result)  // [1, 9, 25]

التقاط المتغيرات في lambda

يمكن لدوال lambda التقاط المتغيرات من النطاق المحيط بها (الإغلاق). وفي Kotlin، يمكنها حتى التقاط المتغير من نوع var وتعديله.
var total = 0
listOf(1, 2, 3, 4).forEach { total += it }
println(total)  // 10

إرجاع lambda من دالة

يمكن للدوال عالية الرتبة أيضًا إرجاع دوال lambda، مما يتيح إنشاء دوال مُنشئة.
fun multiplierOf(factor: Int): (Int) -> Int {
    return { n -> n * factor }
}
val double = multiplierOf(2)
val triple = multiplierOf(3)
println(double(5))  // 10
println(triple(5))  // 15

تحقق سريع

متى يمكنكم نقل lambda خارج القوسين باستخدام صيغة lambda اللاحقة؟

مراجعة

تأخذ الدوال عالية الرتبة دوال lambda كمعلمات. تنقل صيغة lambda اللاحقة lambda خارج القوسين عندما تكون هي المعلمة الأخيرة. يمرر ‎::‎ مراجع الدوال المسماة. التالي: المعلمة الضمنية 'it'!

الأسئلة الشائعة

هل درس «تمرير Lambdas إلى الدوال» مجاني؟

نعم — نص درس «تمرير Lambdas إلى الدوال» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Kotlin Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Kotlin Academy 4 دروس في المجموع.

ماذا ستتعلم في «تمرير Lambdas إلى الدوال»؟

مرّر lambdas كوسائط واستخدم صياغة trailing lambda. تتمرن على Kotlin Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Kotlin Academy؟

لا تُشترط خبرة سابقة. Kotlin Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «تمرير Lambdas إلى الدوال»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Kotlin Academy هذا؟

نعم. كل درس في Kotlin Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. ما هي Lambda؟ الصياغة والأنواع
  2. تمرير Lambdas إلى الدوال
  3. ‏it: المعامل الضمني
  4. ‏filter وmap وfind على المجموعات
← العودة إلى Kotlin Academy