Sequences مقابل Collections
متى يتفوّق كل منها
Sequences مقابل Collections درس مجاني في Kotlin Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Kotlin Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Kotlin Academy 4 دروس في المجموع.
التسلسلات والمجموعات
توفر كل من التسلسلات والمجموعات العمليات الوظيفية نفسها، لكن طريقة تقييمها مختلفة. وتساعدك معرفة متى تتفوق كل منهما على كتابة تعليمات برمجية فعالة وسهلة القراءة.
مراجعة المجموعات الفورية
المجموعات فورية التقييم: تعالج كل عملية جميع العناصر وتنشئ مجموعة جديدة فورًا. ويكون ذلك بسيطًا وسريعًا مع البيانات الصغيرة.
fun main() {
val result = listOf(1, 2, 3).map { it + 1 }.filter { it > 2 }
println(result)
}مراجعة التسلسلات الكسولة
التسلسلات كسولة التقييم: تنشئ العمليات مسارًا للمعالجة يعمل لكل عنصر عند استهلاكه فقط، مما يتجنب المجموعات الوسيطة.
fun main() {
val result = listOf(1, 2, 3).asSequence().map { it + 1 }.filter { it > 2 }.toList()
println(result)
}متى تتفوق المجموعات
بالنسبة إلى المجموعات الصغيرة والسلاسل القصيرة، تكون المجموعات عادةً أسرع وأوضح. إذ تضيف التسلسلات تكلفة لكل عنصر، مثل استدعاءات المكرّر، وقد تتجاوز هذه التكلفة فوائدها مع البيانات الصغيرة جدًا.
متى تتفوق التسلسلات
تتفوق التسلسلات عندما تكون البيانات كبيرة، أو تكون سلسلة العمليات طويلة، أو تحتاج إلى جزء من النتيجة فقط، مثل أول تطابق أو أول N من العناصر. فهي تتجنب إنشاء قوائم وسيطة كبيرة وتتوقف مبكرًا.
fun main() {
val firstEvenSquare = (1..1000000).asSequence()
.map { it * it }
.first { it % 2 == 0 }
println(firstEvenSquare)
}قياس الفرق
يوضح هذا المثال، الذي يستخدم نطاقًا كبيرًا، كيف يتجنب التسلسل إنشاء قائمة وسيطة تحتوي على مليون عنصر، وهي القائمة التي سينشئها الإصدار ذو التقييم الفوري.
fun main() {
val seqResult = (1..1000).asSequence()
.filter { it % 2 == 0 }
.map { it * 3 }
.take(3)
.toList()
println(seqResult)
}استهلاك الذاكرة
تحتفظ سلاسل العمليات ذات التقييم الفوري بكل قائمة وسيطة في الذاكرة في الوقت نفسه. أما التسلسلات فلا تحتفظ إلا بالعنصر الحالي أثناء مروره، لذلك تظل ذروة استهلاك الذاكرة منخفضة في مسارات المعالجة الطويلة.
ميزة الإنهاء المبكر
إذا أمكن لعملية نهائية أن تكتمل مبكرًا، مثل first أو find أو any، فإن التسلسلات تتجاوز العناصر المتبقية، بينما تكون المجموعات ذات التقييم الفوري قد عالجت كل شيء بالفعل.
fun main() {
val found = (1..100).asSequence()
.map { println("checking $it"); it }
.any { it == 3 }
println("Found: $found")
}انتبه إلى العمليات ذات الحالة
تحتاج عمليات مثل sorted وdistinct وgroupBy إلى جميع العناصر، لذلك تقلل من الكسل. وقد لا يستفيد مسار معالجة تهيمن عليه هذه العمليات من استخدام تسلسل.
إرشاد عملي
القاعدة العامة: استخدموا المجموعات افتراضيًا من أجل الوضوح. وانتقلوا إلى التسلسل عند معالجة بيانات كبيرة، أو ربط عمليات كثيرة، أو الحاجة إلى جزء صغير فقط من النتيجة. وقيسوا الأداء دائمًا إذا كان مهمًا.
واجهة برمجية واحدة، وآلية تنفيذ مختلفة
بما أن كليهما يشتركان في أسماء العمليات نفسها، يمكنكم عادةً التبديل بينهما بإضافة asSequence() أو إزالتها، وإضافة عملية نهائية toList(). وهذا يجعل تجربة الأداء منخفضة المخاطر.
fun main() {
val data = listOf(1, 2, 3, 4, 5)
val asList = data.map { it * 2 }.filter { it > 4 }
val asSeq = data.asSequence().map { it * 2 }.filter { it > 4 }.toList()
println(asList == asSeq)
}تحقق سريع
في أي حالة يُرجَّح أن يتفوق التسلسل في الأداء على المجموعة؟
مراجعة
المجموعات ذات تقييم فوري، وهي الأفضل للبيانات الصغيرة وللوضوح؛ أما التسلسلات فكسولة، وهي الأفضل للبيانات الكبيرة أو السلاسل الطويلة أو النتائج الجزئية، بفضل عدم إنشاء قوائم وسيطة والإنهاء المبكر. انتبهوا إلى العمليات ذات الحالة. وتشترك التسلسلات والمجموعات في الواجهة البرمجية نفسها، لذلك يسهل التبديل بينهما. وبذلك تكتمل دورة التسلسلات.
الأسئلة الشائعة
هل درس «Sequences مقابل Collections» مجاني؟
نعم — نص درس «Sequences مقابل Collections» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Kotlin Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Kotlin Academy 4 دروس في المجموع.
ماذا ستتعلم في «Sequences مقابل Collections»؟
متى يتفوّق كل منها تتمرن على Kotlin Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Kotlin Academy؟
لا تُشترط خبرة سابقة. Kotlin Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «Sequences مقابل Collections»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Kotlin Academy هذا؟
نعم. كل درس في Kotlin Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- لماذا نستخدم Sequences
- إنشاء Sequences
- العمليات الكسولة
- Sequences مقابل Collections