آموزش ویژگی های ECMAScript 6 (جلسه 33) : آموزش کار با Generator - قسمت 1

ساخت وبلاگ

همونطور که اطلاع دارید در جلسه قبل بحث مربوط به Iterator ها رو به پایان رساندیم و شما رو بصورت کامل با اونا آشنا کردیم. در این جلسه میخوایم کار با Generator ها رو شروع کنیم و اطلاعاتی کافی برای فهمیدن اونا رو در اختیارتون قرار بدیم.

توضیحات مقدماتی در مورد Generator ها

تا اینجای کار با Iterator ها آشنا شدید. رابطه خاصی بین Generator ها و Iterator ها همونطور که از اسمشون هم معلوم هست، وجود دارد. زمانی که یک تابع Generator رو فراخوانی یا اجرا میکنید، یک Iterator ساخته میشه و میتونین با استفاده از متدهای مختلف از جمله next، بر روی اون تکرار انجام بدین و Generator رو اجرا کنید.

همونطور که در بالا نیز بیان شد، Generator ها نوع خاصی از توابع هستند. در زیر تعدادی از تفاوتهای تابع Generator با تابع معلومی و متداول رو قرار میدیم:

  • در توابع Generator بعد از کلمه function یک علامت ستاره یا * قرار داده میشه
  • توابع Generator سازنده Iterator ها هستند
  • با استفاده از کلمه کلیدی yield میتونیم توابع Generator رو متوقف کرده و با استفاده از متد next میتونیم تابع رو مجددا Play یا اجرا کنیم. توابع معمولی زمانی که صدا زده میشن، کلا و به یکباره اجرا میشن و تمام کدهای درون اون انجام میشه. اما در توابع Generator این قابلیت وجود داره که تابع رو در موقعیت خاصی با استفاده از yield متوقف کنیم و بعدا تحت شرایط خاصی با استفاده از متد next اون رو مجددا اجرا کنیم. با استفاده از این قابلیت کارهایی که قبلا نمیشد انجام داد رو به راحتی میشه اجرایی کرد.
  • در توابع Generator نیز میتونیم از return استفاده کنیم. return باعث میشه که تابع Generator بصورت کامل به پایان برسه و فورا از تابع خارج میشیم. اما yield نوع خاصی از return هست که فقط باعث متوقف شدن تابع میشه و مقدار مقابل خودش رو برمی گردونه.

تعریف کردن اولین تابع سازنده

در بالا تعدادی از تفاوتهای توابع معمولی با توابع Generator قرار داده شد. حالا تعدادی مثال رو با هم بررسی میکنیم تا بهتر با Generator ها آشنا بشیم.

کد زیر رو در نظر بگیرید:

همونطور که میبینید یک سازنده بنام letterMaker رو تعریف کردیم و درون اون سه yield  رو قرار دادیم. اگر دقت کنید یک * بعد از function قرار داده شده است. شما میتونین این ستاره رو بصورت های دیگه نیز قرار بدین و هیچ تفاوتی بین اونا وجود ندارد. میتونین ستاره رو بین function و نام تابع قرار بدین. بصورت زیر:

میتونین ستاره رو قبل از نام تابع قرار بدین و به اون متصلش کنید. بصورت زیر:

هیچ تفاوتی بین روشهای بالا وجود ندارد و هر کدام رو که دوست داشتید انتخاب کنید.

حالا میتونیم این تابع رو فراخوانی کنیم و اون رو درون یک متغیر ذخیره کنیم بصورت زیر:

همونطور که قبلا نیز بیان شد، با اجرا کردن تابع سازنده یک iterator ساخته میشه. پس متغیر letters در کد بالا یک iterator هست که میتونین با استفاده از متد next به مواردی که با استفاده از yield برگشت داده شده است، دسترسی داشته باشید.

کد زیر رو در نظر بگیرید:

میبینید که letters یک iterator هست و میتونیم از اون استفاده کنیم. از خط 9 تا آخر از متد next استفاده کردیم و مقدار value اون رو در Console چاپ کردیم. با اینکار خروجی بصورت زیر خواهد بود:

همونطور که میبینید اون مقادیری که با استفاده از yield برگشت داده شده بود با استفاده از متد next چاپ شده اند. میبینید که بعد از اینکه 3 حرف مورد نظر چاپ شدند، undefined قرار گرفته و نشون میده که دیگه چیزی برای برگشت داده شدن وجود ندارد.

در جلسه بعد بیشتر در مورد این تابع سازنده براتون توضیح میدیم.

موفق و پیروز باشید.

یا علی

سون لرن • آموزش...
ما را در سایت سون لرن • آموزش دنبال می کنید

برچسب : نویسنده : استخدام کار 7learn بازدید : 271 تاريخ : شنبه 22 مهر 1396 ساعت: 9:20

خبرنامه