لماذا نستخدم Sequences
التقييم الكسول
لماذا نستخدم Sequences درس مجاني في Kotlin Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Kotlin Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Kotlin Academy 4 دروس في المجموع.
ما هي Sequences؟
تشبه Sequence المجموعة، لكنها تعالج العناصر بشكل كسول. ولا تُنفّذ العمليات حتى تطلب عملية نهائية النتائج، كما تمرّ العناصر عبر السلسلة بأكملها واحدًا تلو الآخر.
المجموعات eager
تكون عمليات المجموعات القياسية eager: إذ تعالج كل خطوة (filter وmap) القائمة كاملة وتنشئ قائمة وسيطة جديدة قبل بدء الخطوة التالية.
fun main() {
val result = listOf(1, 2, 3, 4)
.map { it * 2 }
.filter { it > 4 }
println(result)
}تكلفة القوائم الوسيطة
عند معالجة بيانات كبيرة، ينشئ التنفيذ eager قائمة جديدة في كل خطوة. ومع كثرة العمليات أو وجود ملايين العناصر، يؤدي ذلك إلى هدر الذاكرة والوقت.
التسلسلات الكسولة
تعالج التسلسلة كل عنصر عبر مسار المعالجة بأكمله قبل الانتقال إلى العنصر التالي. ولا تُنشأ قوائم وسيطة. حوّلوا المجموعة باستخدام asSequence().
fun main() {
val result = listOf(1, 2, 3, 4)
.asSequence()
.map { it * 2 }
.filter { it > 4 }
.toList()
println(result)
}رؤية ترتيب التنفيذ
يكشف وضع تعليمات الطباعة الفرق بين الطريقتين. ففي التسلسل، يمر كل عنصر عبر map ثم filter قبل بدء معالجة العنصر التالي.
fun main() {
listOf(1, 2, 3).asSequence()
.map { println("map $it"); it * 2 }
.filter { println("filter $it"); it > 2 }
.toList()
}ترتيب التنفيذ eager
قارنوا ذلك بالقائمة العادية: تُنفّذ map أولًا على ALL العناصر، ثم تُنفّذ filter على جميع العناصر.
fun main() {
listOf(1, 2, 3)
.map { println("map $it"); it * 2 }
.filter { println("filter $it"); it > 2 }
}الإيقاف المبكر
يتيح التقييم الكسول الإيقاف المبكر: إذ تتوقف عمليات مثل first أو find فور العثور على نتيجة، فتتجنب معالجة بقية العناصر.
fun main() {
val firstBig = (1..1000000).asSequence()
.map { it * 2 }
.first { it > 10 }
println(firstBig)
}العمليات الوسيطة والنهائية
تنقسم عمليات Sequence إلى نوعين:
- وسيطة (
mapوfilterوtake): كسولة، وتُرجع تسلسلًا آخر. - نهائية (
toListوsumوfirst): تطلق الحساب وتنتج قيمة.
لا يحدث شيء دون عملية نهائية
لا تنفّذ سلسلة وسيطة وحدها أي تعليمة. ولا تُنفّذ دوال lambda حتى استدعاء عملية نهائية.
fun main() {
val seq = listOf(1, 2, 3).asSequence()
.map { println("processing $it"); it }
println("Nothing printed yet")
seq.toList()
}متى تكون التسلسلات مفيدة
تتفوّق التسلسلات مع مجموعات البيانات الكبيرة، أو سلاسل العمليات الطويلة، أو عندما تحتاجون إلى جزء من النتيجة فقط، مثل أول تطابق. أما القوائم الصغيرة، فالمجموعات العادية أبسط وأداؤها مماثل.
تصوّر ذهني
تخيّلوا أن المجموعة تعالج البيانات في طبقات أفقية (جميع العناصر في كل خطوة)، بينما تعالج التسلسلات البيانات في مسارات عمودية (يمر عنصر واحد عبر جميع الخطوات). ولهذا تتجنب التسلسلات إنشاء القوائم الوسيطة.
تحقق سريع
لماذا قد تكون التسلسلات أكثر كفاءة من المجموعات؟
مراجعة
تعالج التسلسلات البيانات بشكل كسول، عنصرًا تلو الآخر، عبر سلسلة من العمليات الوسيطة، ولا يبدأ الحساب إلا عند تنفيذ عملية نهائية. ويؤدي ذلك إلى تجنب القوائم الوسيطة وتمكين الإيقاف المبكر. بعد ذلك ستتعلّمون كيفية إنشاء التسلسلات.
الأسئلة الشائعة
هل درس «لماذا نستخدم Sequences» مجاني؟
نعم — نص درس «لماذا نستخدم Sequences» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Kotlin Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Kotlin Academy 4 دروس في المجموع.
ماذا ستتعلم في «لماذا نستخدم Sequences»؟
التقييم الكسول تتمرن على Kotlin Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Kotlin Academy؟
لا تُشترط خبرة سابقة. Kotlin Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «لماذا نستخدم Sequences»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Kotlin Academy هذا؟
نعم. كل درس في Kotlin Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- لماذا نستخدم Sequences
- إنشاء Sequences
- العمليات الكسولة
- Sequences مقابل Collections