برنامج تعليمي لمولدات جافا سكريبت

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

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

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

كل هذا يتم باستخدام كلمة رئيسية واحدة بسيطة:yield. عندما يحتوي المولد على تلك الكلمة الأساسية ، يتوقف التنفيذ.

يمكن أن يحتوي المولد على الكثيرyieldالكلمات الرئيسية ، وبالتالي تتوقف عدة مرات ، ويتم تحديدها بواسطة*functionالكلمة الأساسية ، والتي يجب عدم الخلط بينها وبين عامل إشارة إشارة المؤشر المستخدم في لغات البرمجة ذات المستوى الأدنى مثل C أو C ++ أو Go.

تُمكِّن المولدات نماذج جديدة كاملة للبرمجة في JavaScript ، مما يسمح بما يلي:

  • اتصال ثنائي الاتجاه أثناء تشغيل المولد
  • طويل العمرالحلقاتالتي لا تجمد برنامجك

فيما يلي مثال للمولد الذي يشرح كيف يعمل كل شيء.

function *calculator(input) {
    var doubleThat = 2 * (yield (input / 2))
    var another = yield (doubleThat)
    return (input * doubleThat * another)
}

نقوم بتهيئته مع

const calc = calculator(10)

ثم نبدأ المكرر على المولد الخاص بنا:

calc.next()

يبدأ هذا التكرار الأول المكرر. يعيد الرمز هذا الكائن:

{
  done: false
  value: 5
}

ما يحدث هو: يقوم الكود بتشغيل الوظيفة ، معinput = 10كما تم تمريره في منشئ المولد. يتم تشغيله حتى يصل إلىyield، ويعيد محتوىyield:input / 2 = 5. لذلك حصلنا على القيمة 5 ، والإشارة إلى أن التكرار لم يتم (تم إيقاف الوظيفة مؤقتًا فقط).

في التكرار الثاني نقوم بتمرير القيمة7:

calc.next(7)

وما عدنا هو:

{
  done: false
  value: 14
}

7تم وضعه على أنه قيمةdoubleThat. هام: قد تقرأ مثلinput / 2كانت الحجة ، ولكن هذه فقط القيمة المعادة للتكرار الأول. نتخطى ذلك الآن ونستخدم قيمة الإدخال الجديدة ،7, and multiply it by 2.

ثم نصل إلى العائد الثاني ، وهذا يعودdoubleThat، لذلك فإن القيمة التي تم إرجاعها هي14.

In the next, and last, iteration, we pass in 100

calc.next(100)

وفي المقابل حصلنا

{
  done: true
  value: 14000
}

مع إجراء التكرار (لم يتم العثور على كلمات رئيسية أكثر إنتاجية) ونعود للتو(input * doubleThat * another)وهو ما يرقى إلى10 * 14 * 100.


المزيد من دروس js: