0Pricing
Dart Academy · درس

القيم القابلة للتكرار والمولّدات الكسولة باستخدام sync*

إنتاج القيم عند الطلب

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

ما معنى Lazy؟

لا تحسب المجموعة القابلة للتكرار lazy قيمها حتى تطلبها فعليًا. يحدث العمل عند الطلب، لا دفعة واحدة. 🦥

Iterables كسولة

تعيد أساليب مثل map وwhere كائن Iterable كسولًا. ولا يُنفذ شيء حتى تكرر العناصر أو تستدعي toList.

var it = [1, 2, 3].map((n) {
  print('seen $n');
  return n * 2;
});

لم يُنفذ شيء بعد

إلى أن تستهلك ذلك iterable، لا يُنفذ جسم map مطلقًا. تتيح لك الكسلية وصف العمل وتأجيل التكلفة.

for (var x in it) print(x); // now it runs

لماذا تفيد الكسلية؟

توفر الكسلية العمل عندما تحتاج إلى بضع نتائج فقط. وبدمجها مع take، يمكنك التوقف مبكرًا وتجاوز الباقي.

var first2 = it.take(2).toList();

تعرّف إلى مولدات sync*

دالة sync* هي مولد ينشئ Iterable كسولًا. وتنتج القيم واحدة تلو الأخرى عند طلبها.

Iterable<int> count(int n) sync* {
  for (var i = 1; i <= n; i++) yield i;
}

الكلمة المفتاحية yield

داخل المولد، تعيد yield قيمة واحدة إلى المستدعي وتوقف التنفيذ مؤقتًا حتى الحاجة إلى القيمة التالية.

print(count(3).toList()); // [1, 2, 3]

التسلسلات اللانهائية

بما أن القيم كسولة، يمكن للمولد وصف تسلسل لانهائي بأمان، ما دمت تأخذ منه جزءًا محدودًا فقط.

Iterable<int> naturals() sync* {
  var i = 0;
  while (true) yield ++i;
}

أخذ جزء محدود

استخدم مولدًا لانهائيًا مع take للحصول على ما تحتاج إليه فقط. وتتوقف الحلقة فور اكتمال الجزء المطلوب.

print(naturals().take(5).toList()); // [1, 2, 3, 4, 5]

تفويض yield*

استخدم yield* لإصدار كل قيمة من iterable أو مولد آخر. فهو يسطح تسلسلًا واحدًا داخل التسلسل الحالي.

Iterable<int> both() sync* {
  yield* count(2);
  yield* count(2);
}

المولدات مقارنةً ببناء القوائم

يتجنب المولد بناء قائمة كاملة في الذاكرة. فهو يبث القيم، مما يحافظ على استهلاك خفيف للذاكرة في التسلسلات الكبيرة أو التي لا تنتهي.

sync* مقارنةً بـ async*

استخدم sync* مع iterables كسولة ومتزامنة. أما شقيقه غير المتزامن، async*، فينتج Stream لتسلسلات الأحداث غير المتزامنة.

تحقق سريع

اختبر فهمك للمولدات.

مراجعة

تتسم Iterables بالكسل، وتنتج مولدات sync* القيم عند الطلب. ويتيح لك ذلك تمثيل حتى التسلسلات اللانهائية بتكلفة منخفضة. 🌟

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

هل درس «القيم القابلة للتكرار والمولّدات الكسولة باستخدام sync*» مجاني؟

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

ماذا ستتعلم في «القيم القابلة للتكرار والمولّدات الكسولة باستخدام sync*»؟

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

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

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

كم من الوقت يستغرق درس «القيم القابلة للتكرار والمولّدات الكسولة باستخدام sync*»؟

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

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

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

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

  1. الدوال من الدرجة الأعلى والكاريّنة
  2. ‏fold وreduce وexpand
  3. القيم القابلة للتكرار والمولّدات الكسولة باستخدام sync*
  4. تركيب مسارات الدوال النقية
← العودة إلى Dart Academy