دوال المولّد و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)

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);
}

استدعاء 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 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)]);

سلسلة 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 يوقِف التنفيذ مؤقتًا؛ return ينهي التسلسل.
- بعد اكتمال المولّد، يصبح مستنفدًا؛ استدعِ الدالة مجددًا للحصول على مكرّر جديد.

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

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

الأسئلة الشائعة
هل درس «دوال المولّد و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 يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- بروتوكول القابلية للتكرار وfor...of
- دوال المولّد وyield وخطوط المعالجة الصغيرة
- المكررات غير المتزامنة — for await...of والمولّدات غير المتزامنة