التجميع
sum وcount وfold وreduce
التجميع درس مجاني في Kotlin Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Kotlin Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Kotlin Academy 4 دروس في المجموع.
اختزال المجموعات
يختزل التجميع المجموعة إلى قيمة واحدة. توفّر Kotlin دوال جاهزة مثل sum وcount وaverage وmax، بالإضافة إلى الدالتين العامتين fold وreduce.
sum وaverage
تجمع sum العناصر العددية، وتُرجع average متوسطها الحسابي من النوع Double.
fun main() {
val numbers = listOf(2, 4, 6, 8)
println("Sum: ${numbers.sum()}")
println("Average: ${numbers.average()}")
}count
تُرجع count عدد العناصر، مع إمكانية تصفيتها اختياريًا وفق شرط.
fun main() {
val numbers = listOf(1, 2, 3, 4, 5, 6)
println("Total: ${numbers.count()}")
println("Even count: ${numbers.count { it % 2 == 0 }}")
}maxOrNull وminOrNull
للعثور على القيم القصوى بأمان، استخدموا maxOrNull وminOrNull، إذ تُرجعان null للمجموعات الفارغة.
fun main() {
val numbers = listOf(3, 7, 2, 9, 4)
println("Max: ${numbers.maxOrNull()}")
println("Min: ${numbers.minOrNull()}")
}sumOf وmaxByOrNull
تجمع sumOf قيمة محدّدة لكل عنصر، بينما تبحث maxByOrNull عن العنصر ذي أكبر قيمة محدّدة.
data class Item(val name: String, val price: Int)
fun main() {
val items = listOf(Item("a", 10), Item("b", 30), Item("c", 20))
println("Total price: ${items.sumOf { it.price }}")
println("Most expensive: ${items.maxByOrNull { it.price }?.name}")
}دالة fold
تجمع fold العناصر في نتيجة واحدة، بدءًا من قيمة ابتدائية. وتتلقى دالة lambda المُراكم الحالي والنتيجة الجارية والعنصر الحالي.
fun main() {
val numbers = listOf(1, 2, 3, 4)
val total = numbers.fold(100) { acc, n -> acc + n }
println(total)
}يمكن لـfold تغيير النوع
لأنكم توفّرون القيمة الابتدائية، يمكن لـfold إنشاء نتيجة من أي نوع، مثل String.
fun main() {
val words = listOf("Kotlin", "is", "fun")
val sentence = words.fold("") { acc, w -> if (acc.isEmpty()) w else "$acc $w" }
println(sentence)
}دالة reduce
تشبه reduce الدالة fold، لكنها تستخدم العنصر الأول مُراكمًا ابتدائيًا. وتُطلق استثناءً إذا كانت المجموعة فارغة، ولا يمكنها تغيير النوع.
fun main() {
val numbers = listOf(1, 2, 3, 4)
val product = numbers.reduce { acc, n -> acc * n }
println(product)
}fold مقابل reduce
الاختلافات الأساسية:
- تأخذ
foldقيمة ابتدائية، وتعمل مع المجموعات الفارغة، ويمكنها إرجاع نوع مختلف. - تبدأ
reduceمن العنصر الأول، وتفشل مع المجموعات الفارغة، وتحافظ على نوع العناصر.
fun main() {
val empty = emptyList<Int>()
println(empty.fold(0) { acc, n -> acc + n })
println("fold is safe on empty lists")
}runningFold وrunningReduce
إذا أردتم الحصول على كل مُراكم وسيط، فإن runningFold (وrunningReduce) تُرجع قائمة بالنتائج الجزئية.
fun main() {
val numbers = listOf(1, 2, 3, 4)
val sums = numbers.runningFold(0) { acc, n -> acc + n }
println(sums)
}اختيار دالة التجميع
استخدموا الدوال المتخصصة (sum وcount وaverage وmaxOrNull) عندما تكون مناسبة. واستخدموا fold أو reduce للعمليات المخصّصة، مع تفضيل fold عند الحاجة إلى قيمة ابتدائية أو تغيير النوع.
تحقق سريع
ما الفرق الأساسي بين fold وreduce؟
مراجعة
تعلّمتم اختزال المجموعات باستخدام sum وcount وaverage وmaxOrNull وsumOf، بالإضافة إلى fold العام (قيمة ابتدائية، أي نوع، وآمن مع المجموعات الفارغة) وreduce (يبدأ من العنصر الأول). بعد ذلك ستنشئون الخرائط وتسطّحون المجموعات المتداخلة.
الأسئلة الشائعة
هل درس «التجميع» مجاني؟
نعم — نص درس «التجميع» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Kotlin Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Kotlin Academy 4 دروس في المجموع.
ماذا ستتعلم في «التجميع»؟
sum وcount وfold وreduce تتمرن على Kotlin Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Kotlin Academy؟
لا تُشترط خبرة سابقة. Kotlin Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «التجميع»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Kotlin Academy هذا؟
نعم. كل درس في Kotlin Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.