0Pricing
JavaScript Academy · درس

دوال المولّد وyield وخطوط المعالجة الصغيرة

اكتبوا دوال مولّد باستخدام function*، واستخدموا yield لإنتاج القيم كسولًا، وشغّلوها باستخدام for...of أو next()، واربطوا خطوط معالجة صغيرة

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

لماذا generators؟

الهدف: إنتاج القيم بشكل كسول باستخدام generators.

  • يعرّف function* generator
  • ينتج yield القيم خطوة بخطوة
  • استخدم for...of أو next() للاستهلاك
  • ألّف مسارات معالجة صغيرة (شبيهة بـ map)
دوال المولّد وyield وخطوط المعالجة الصغيرة — رسم توضيحي 1

function* و yield

تستخدم المولّدات function* وyield. يُستأنف التكرار من آخر yield.

// A basic generator that yields 1..n lazily
function* countTo(n) {
  for (let i = 1; i <= n; i = i + 1) {
    yield i; // pause here and give i to the caller
  }
}

for (const x of countTo(3)) {
  console.log("value:", x);
}
دوال المولّد وyield وخطوط المعالجة الصغيرة — رسم توضيحي 2

استدعاء next() يدويًا

تتقدّم next() عبر قيم yield، ثم تُرجع أخيرًا done: true عند الانتهاء.

// You can also drive a generator manually with next()
const it = countTo(2);

console.log(it.next()); // { value: 1, done: false }
console.log(it.next()); // { value: 2, done: false }
console.log(it.next()); // { value: undefined, done: true }
دوال المولّد وyield وخطوط المعالجة الصغيرة — رسم توضيحي 3

الأعداد الزوجية بشكل كسول

تُعدّ المولّدات مناسبة جدًا لـالتدفقات البسيطة، مثل الأعداد الزوجية، من دون إنشاء مصفوفات كبيرة مسبقًا.

// Yield even numbers up to n (inclusive)
function* evensUpTo(n) {
  for (let i = 0; i <= n; i = i + 1) {
    if (i % 2 === 0) {
      yield i;
    }
  }
}

console.log("evens 0..6:", [...evensUpTo(6)]);
دوال المولّد وyield وخطوط المعالجة الصغيرة — رسم توضيحي 4

سلسلة map كسولة

أنشئ خطوات صغيرة مترابطة: مرّر مولّدًا إلى مولّد آخر لبناء سلاسل معالجة كسولة.

// map() as a generator: transform values lazily
function* map(iterable, fn) {
  for (const v of iterable) {
    yield fn(v);
  }
}

const doubled = map(countTo(4), function (x) { return x * 2; });
console.log("doubled:", [...doubled]);
دوال المولّد وyield وخطوط المعالجة الصغيرة — رسم توضيحي 5

ممارسات جيدة

نصائح:

  • استدعِ دالة المولّد للحصول على مكرّر (فهي لا تُنفَّذ كاملةً منذ البداية).
  • yield يوقِف التنفيذ مؤقتًا؛ return ينهي التسلسل.
  • بعد اكتمال المولّد، يصبح مستنفدًا؛ استدعِ الدالة مجددًا للحصول على مكرّر جديد.
دوال المولّد وyield وخطوط المعالجة الصغيرة — رسم توضيحي 6

اختبار قيمة إرجاع المولّد

فحص سريع: ما الذي تُرجعه دالة مولّدة؟

دوال المولّد وyield وخطوط المعالجة الصغيرة — رسم توضيحي 7

مراجعة

مراجعة: عرّف function*، وأنشئ القيم باستخدام yield بشكل كسول، واستهلكها باستخدام for...of أو next()، واربط سلاسل معالجة صغيرة من المولّدات لإجراء تحويلات بسيطة.

دوال المولّد وyield وخطوط المعالجة الصغيرة — رسم توضيحي 8

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

هل درس «دوال المولّد وyield وخطوط المعالجة الصغيرة» مجاني؟

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

ماذا ستتعلم في «دوال المولّد وyield وخطوط المعالجة الصغيرة»؟

اكتبوا دوال مولّد باستخدام function*، واستخدموا yield لإنتاج القيم كسولًا، وشغّلوها باستخدام for...of أو next()، واربطوا خطوط معالجة صغيرة تتمرن على JavaScript Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

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

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

كم من الوقت يستغرق درس «دوال المولّد وyield وخطوط المعالجة الصغيرة»؟

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

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

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

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

  1. بروتوكول القابلية للتكرار وfor...of
  2. دوال المولّد وyield وخطوط المعالجة الصغيرة
  3. المكررات غير المتزامنة — for await...of والمولّدات غير المتزامنة
← العودة إلى JavaScript Academy