همونطور که اطلاع دارید در جلسه قبل بحث مربوط به Iterator ها رو به پایان رساندیم و شما رو بصورت کامل با اونا آشنا کردیم. در این جلسه میخوایم کار با Generator ها رو شروع کنیم و اطلاعاتی کافی برای فهمیدن اونا رو در اختیارتون قرار بدیم.
تا اینجای کار با Iterator ها آشنا شدید. رابطه خاصی بین Generator ها و Iterator ها همونطور که از اسمشون هم معلوم هست، وجود دارد. زمانی که یک تابع Generator رو فراخوانی یا اجرا میکنید، یک Iterator ساخته میشه و میتونین با استفاده از متدهای مختلف از جمله next، بر روی اون تکرار انجام بدین و Generator رو اجرا کنید.
همونطور که در بالا نیز بیان شد، Generator ها نوع خاصی از توابع هستند. در زیر تعدادی از تفاوتهای تابع Generator با تابع معلومی و متداول رو قرار میدیم:
در بالا تعدادی از تفاوتهای توابع معمولی با توابع Generator قرار داده شد. حالا تعدادی مثال رو با هم بررسی میکنیم تا بهتر با Generator ها آشنا بشیم.
کد زیر رو در نظر بگیرید:
function* letterMaker() { yield 'a'; yield 'b'; yield 'c'; } |
همونطور که میبینید یک سازنده بنام letterMaker رو تعریف کردیم و درون اون سه yield رو قرار دادیم. اگر دقت کنید یک * بعد از function قرار داده شده است. شما میتونین این ستاره رو بصورت های دیگه نیز قرار بدین و هیچ تفاوتی بین اونا وجود ندارد. میتونین ستاره رو بین function و نام تابع قرار بدین. بصورت زیر:
function * letterMaker() { yield 'a'; yield 'b'; yield 'c'; } |
میتونین ستاره رو قبل از نام تابع قرار بدین و به اون متصلش کنید. بصورت زیر:
function *letterMaker() { yield 'a'; yield 'b'; yield 'c'; } |
هیچ تفاوتی بین روشهای بالا وجود ندارد و هر کدام رو که دوست داشتید انتخاب کنید.
حالا میتونیم این تابع رو فراخوانی کنیم و اون رو درون یک متغیر ذخیره کنیم بصورت زیر:
function* letterMaker() { yield 'a'; yield 'b'; yield 'c'; } const letters = letterMaker(); |
همونطور که قبلا نیز بیان شد، با اجرا کردن تابع سازنده یک iterator ساخته میشه. پس متغیر letters در کد بالا یک iterator هست که میتونین با استفاده از متد next به مواردی که با استفاده از yield برگشت داده شده است، دسترسی داشته باشید.
کد زیر رو در نظر بگیرید:
1 2 3 4 5 6 7 8 9 10 11 12 | function* letterMaker() { yield 'a'; yield 'b'; yield 'c'; } const letters = letterMaker(); console.log(letters.next().value); console.log(letters.next().value); console.log(letters.next().value); console.log(letters.next().value); |
میبینید که letters یک iterator هست و میتونیم از اون استفاده کنیم. از خط 9 تا آخر از متد next استفاده کردیم و مقدار value اون رو در Console چاپ کردیم. با اینکار خروجی بصورت زیر خواهد بود:
همونطور که میبینید اون مقادیری که با استفاده از yield برگشت داده شده بود با استفاده از متد next چاپ شده اند. میبینید که بعد از اینکه 3 حرف مورد نظر چاپ شدند، undefined قرار گرفته و نشون میده که دیگه چیزی برای برگشت داده شدن وجود ندارد.
در جلسه بعد بیشتر در مورد این تابع سازنده براتون توضیح میدیم.
موفق و پیروز باشید.
یا علی
سون لرن • آموزش...برچسب : نویسنده : استخدام کار 7learn بازدید : 275