Dart Academy · درس

تحويل Streams: map وwhere وtake

أعد تشكيل تسلسل الأحداث

الدرس 3 من 413 خطوة

تحويل Streams: map وwhere وtake درس مجاني في Dart Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Dart Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Dart Academy 4 دروس في المجموع.

يمكن تحويل Streams

مثل القوائم تمامًا، تحتوي streams على أساليب مفيدة تعيد تشكيل أحداثها. يمكنك تحويل stream إلى آخر جديد من دون لمس المصدر.

يحوّل map كل حدث

يشغّل الأسلوب map دالةً على كل حدث ويصدر النتيجة. وهكذا يحوّل stream من القيم إلى stream من القيم المحوّلة.

final doubled = numbers.map((n) => n * 2);

يحافظ map على العدد

مع map يبقى عدد الأحداث كما هو، ولا يتغير سوى شكلها. فثلاثة مدخلات تنتج دائمًا ثلاثة مخرجات بالضبط. ✨

Stream.fromIterable([1, 2, 3])
    .map((n) => 'Item $n');

تُرشّح where الأحداث

يُبقي الأسلوب where على الأحداث التي تجتاز اختبارًا فقط. وكل ما يعيد false يُحذف من stream الجديد.

final evens = numbers.where((n) => n.isEven);

يمكن لـ where تقليص Stream

على خلاف map، قد يصدر where أحداثًا أقل من تلك التي تلقاها. وإذا لم يجتز أي حدث الاختبار، يظل stream الناتج فارغًا.

يحد take العدد

يصدر الأسلوب take أول n من الأحداث فقط، ثم يتوقف عن الاستماع. وهو مثالي عندما تحتاج إلى بضع قيم فقط من stream طويل. 🎯

final firstThree = bigStream.take(3);

يلغي take الاشتراك مبكرًا

بعد تسليم أحداثه وعددها n، يلغي take اشتراكه في المصدر تلقائيًا. ويتوقف stream الأصلي عن الإنتاج من أجلك.

تسلسل التحويلات

تعيد هذه الأساليب streams جديدة، لذا يمكنك تسلسلها. اقرأ التسلسل من اليسار إلى اليمين: ترشيح، ثم تحويل، ثم تحديد للعدد.

numbers
    .where((n) => n.isEven)
    .map((n) => n * 10)
    .take(2);

كسولة بطبيعتها

التحويلات كسولة؛ فلا شيء يُنفّذ حتى تستمع. ولا تعالج السلسلة الأحداث إلا عند وصولها، واحدًا تلو الآخر.

أدوات إضافية: takeWhile وskip

إلى جانب الأساليب الأساسية الثلاثة، يصدر takeWhile الأحداث إلى أن يفشل اختبار ما، بينما يتجاهل skip أول n من الأحداث. وينطبق أسلوب التسلسل نفسه.

stream.skip(2).takeWhile((n) => n < 100);

استهلاك النتيجة

بعد تحويل stream، اقرأه باستخدام await for أو استمع إليه. فقد مرّت كل قيمة صادرة عبر سلسلة التحويل كاملة.

await for (final v in transformed) {
  print(v);
}

اختبار سريع

أي أسلوب يمكنه تقليل عدد الأحداث؟

مراجعة

يمكنك إعادة تشكيل streams باستخدام map للتحويل، وwhere للترشيح، وtake لتحديد العدد؛ وكلها قابلة للتسلسل وتظل كسولة حتى تستمع إليها. 🎉

البدء مجانًا

تعلم Dart مع معلم ذكاء اصطناعي — مجانًا

اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.

الدورات
30
الدروس
120

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

هل درس «تحويل Streams: map وwhere وtake» مجاني؟

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

ماذا ستتعلم في «تحويل Streams: map وwhere وtake»؟

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

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

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

كم من الوقت يستغرق درس «تحويل Streams: map وwhere وtake»؟

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

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

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

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

  1. الاستماع باستخدام await for
  2. Streams أحادية البث في مقابل Streams المذاعة
  3. تحويل Streams: map وwhere وtake
  4. إنشاء Streams باستخدام async*
← العودة إلى Dart Academy