المولدات - البتات الغريبة

نجحت مواصفات مسودة ECMAscript 6 في الحصول على العديد من مصادر المتعة لمطوِّر JavaScript الحديث. لقد ناقشنا بعض فئات المجموعات الجديدة وتكرارات for..of في مشاركة سابقة. سنتحدّث في هذه المشاركة عن موضوع يسير جنبًا إلى جنب مع حلقات for..of: دوال الإنشاء.

يمكنك الاطّلاع على مضيف للمواد الرائعة التي تتناول كيفية استخدام أدوات الإنشاء وشرحها. باختصار، أدوات الإنشاء هي دوال خاصة تنشئ مكرّرات، والمكرّرات هي كائنات لها الطريقة next()، والتي يمكن استدعاؤها للحصول على قيمة. داخل دالة المنشئ، توفر الكلمة الرئيسية yield القيمة لـ next(). يؤدي استخدام yield إلى تعليق تنفيذ دالة المنشئ، مع الحفاظ على الحالة حتى يتم استدعاء next() مرة أخرى، وعند ذلك يبدأ الرمز مرة أخرى ويستمر حتى يتم yield ضبط قيمة أخرى (أو إلى إنهاء دالة المنشئ). هناك العديد من حالات الاستخدام الأساسية لدوال الإنشاء، مثل استخدامها لتكرار الأرقام في تسلسل فيبوناتشي.

مع استبعاد الأساسيات، لنتعمق أكثر في عينة JavaScript التي تغطي بعض المشكلات، أو "التغيرات الغريبة"، المتعلقة بالعمل مع أدوات الإنشاء. هناك تعليقات كثيرة جدًا، ويمكنك تجربة الإصدار المباشر من الرمز قبل قراءته:

إذن ما بعض النقاط الرئيسية من التعليمات البرمجية؟

أولًا، يؤدي إنشاء المولّد إلى الحصول على مكرّر فريد بحالته المميزة، ويمكنك تمرير المعلمات إلى الدالة الإنشائية للمنشئ الذي يمكنه التحكم في السلوك.

ثانيًا، يمكنك إدخال معلَمة عند استدعاء طريقة next() الخاصة بالمُكرّر، وسيتم تخصيص هذه القيمة لكل ما في الجانب الأيمن من عبارة yield من استدعاء المكرّر السابق. هذه طريقة رائعة لتنويع مخرجات المكرر، حيث نستخدمه هنا للتحكم في ما إذا كانت الكلمة الناتجة مكتوبة بأحرف كبيرة أم لا. إذا كنت تريد التأثير في أول قيمة يتم الحصول عليها، يمكنك إجراء ذلك من خلال مَعلمة الدالة الإنشائية للمنشئ.

أخيرًا، يمكن للمولّدات إنتاج مكرِّرات محدودة أو لا متناهية. إذا كنت تستخدم مُكررًا لا نهائي، تأكد من وجود شرط طرفي بالاستناد إلى القيمة yielded، من السهل جدًا كتابة حلقات لانهائية عن طريق الخطأ، خاصةً عند استخدام for..of للتكرار. إذا كنت تستخدم مُكررًا نهائيًا من خلال استدعاءات next()، ستشير السمة .done من العنصر الذي يعرض إلى ما إذا كان التكرار مكتملاً.

نأمل أن تثير هذه العينة، بالإضافة إلى الموارد الأخرى المتاحة على الويب، بعض الإثارة وتجعلك تفكر في كيفية استخدام أدوات الإنشاء في التعليمات البرمجية الخاصة بك. إصدارات سابقة من Firefox التي تبدأ بالإصدار 31، وإصدارات Chrome التي تبدأ بـ 39 منشئ دعم في الأصل. يوفر مشروع Regenerator دعمًا لأداة الإنشاء للمتصفحات الأخرى، كما خيار استخدام Traceur هو خيار متاح أيضًا.

نشكرك على إريك أرفيدسون على المساعدة في مراجعة هذه المقالة.