مقدمه
در ECMAScript 2015 ، ژنراتورها (آزانگرها) به زبان JavaScript معرفی شدند. ژنراتورفرایندی است که می تواند متوقف شده و از سر گرفته شود و می تواند مقادیر مختلفی را ارائه دهد. ژنراتور در جاوا اسکریپت از یک تابع ژنراتور تشکیل شده است ، که یک مفعول Generator تکرارگر را برمی گرداند.
ژنراتورها می توانند حالت خود را حفظ کنند ، روشی کارآمد برای ایجاد تکرارگرها ارائه دهند ، و قادر به کار با داده های نامتناهی هستند که می توانند برای اجرای اسکرول نامحدود در یک برنامه وب ، کار با داده های موج صدا و موارد دیگر استفاده شوند. علاوه بر این ، در هنگام استفاده به همراه promise ها ، می توانند از تابع async/await استفاده کنند ، که به ما امکان می دهد با کد غیرهمزمان با روشی ساده تر و خواناتر سر و کار داشته باشیم. اگرچه async / await روشی معمول تر برای کار با موارد استفاده معمول، ساده و غیر همزمان، مانند گرفتن داده ها از یک API است، ژنراتورها ویژگی های پیشرفته تری دارند که یادگیری نحوه استفاده از آنها را ارزشمند می کند.
در این مقاله ، ما نحوه ایجاد توابع ژنراتور ، نحوه تکرار آبجکت های ژنراتور ، تفاوت بین yield  و return  در داخل ژنراتور و سایر جنبه های کار با ژنراتور را پوشش خواهیم داد.
توابع ژنراتور
یک تابع ژنراتور تابعی است که یک آبجکت Generator را برمی گرداند و همانطور که در شکل زیر نشان داده شده است توسط کلید واژه function  به همراه ستاره (*) تعریف می شود:
// Generator function declaration
function* generatorFunction() {}

گاهی اوقات ، ستاره را در کنار نام تابع و مقابل کلمه کلیدی تابع مانند function *generatorFunction() ، مشاهده می کنید. این هم به همان صورت عمل میکند ، اما function* به طور گسترده تری پذیرفته شده است.
توابع ژنراتور نیز مانند توابع معمولی می تواند در یک عبارت تعریف شود:
// Generator function expression
const generatorFunction = function*() {}

ژنراتورها حتی می توانند روشهای یک آبجکت یا کلاس باشند:
// Generator as the method of an object
const generatorObj = {
*generatorMethod() {},
}

// Generator as the method of a class
class GeneratorClass {
*generatorMethod() {}
}

مثالهای موجود در طول این مقاله از دستور اعلان تابع ژنراتور استفاده می کنند.
توجه: بر خلاف توابع معمولی ، ژنراتورها را نمی توان با کلمه کلیدی new ساخت ، و همچنین نمی توان آنها را همراه با توابع آرایه ای استفاده کرد.

اکنون که می دانید چگونه می توانید توابع ی ژنراتور را اظهار کنید ، بیایید به آبجکت های ژنراتور تکرارگر که باز می گردند نگاهی بیندازید.
آبجکت های ژنراتور
به طور معمول ، توابع موجود در جاوا اسکریپت تا زمان اتمام اجرا میشوند ، و فراخوانی یک تابع با رسیدن به کلمه کلیدی return ، مقداری را برمی گرداند. در صورت حذف کلمه کلیدی return ، یک تابع به طور ضمنی undefined را باز خواهد گرداند.
به عنوان مثال در کد زیر یک تابع sum () را اعلام می کنیم که مقداری را برمی گرداند که جمع آن دو عدد صحیح است:
// A regular function that sums two values
function sum(a, b) {
return a + b
}

فراخوانی تابع مقداری را نشان می دهد که مجموع آرگومان ها است:
const value = sum(5, 6) // 11
Copy

با این حال ، تابع ژنراتور ، یک مقدار را فوراً بر نمی گرداند ، و در عوض یک آبجکت ژنراتور تکرارگر را برمی گرداند. در مثال زیر ، یک تابع را اعلام می کنیم و مانند یک تابع استاندارد ، تک مقدار برگشتی به آن می دهیم:
// Declare a generator function with a single return value
function* generatorFunction() {
return ‘Hello, Generator!’
}

هنگامی که ما از تابع ژنراتور درخواست می کنیم ، آبجکت ژنراتور را برمی گرداند ، که می توانیم به یک متغیر اختصاص دهیم:
// Assign the Generator object to generator
const generator = generatorFunction()

 

توجه داشته باشید که این اجرا برای نشان دادن چگونگی استفاده از ژنراتورها به جای async / await است و یک طراحی آماده برای تولید نیست. این روش در تنظیمات خطایی ندارد و همچنین توانایی انتقال پارامترها به مقادیر yield را ندارد. گرچه این روش می تواند انعطاف پذیری را به کد شما بیفزاید ، اما اغلب async/awaitانتخاب بهتری خواهد بود ، زیرا جزئیات اجرا را خلاصه می کند و به شما امکان می دهد تا روی نوشتن کد موثر تمرکز کنید.
نتیجه
ژنراتورها فرآیندهایی هستند که می توانند اجرا را متوقف کرده و از سر گرفته شوند. آنها یکی از ویژگی های قدرتمند و همه کاره جاوا اسکریپت هستند ، اگرچه معمولاً مورد استفاده قرار نمی گیرند. در این آموزش با توابع ژنراتور و آبجکت های ژنراتور ، روش های موجود برای ژنراتورها ، عملگرهای yield* و yield و ژنراتورهای مورد استفاده با مجموعه داده های محدود و نامتناهی آشنا شدیم. همچنین یک راه برای پیاده سازی کد ناهمزمان را بدون کال بک های آشیانه ای یا زنجیره های طولانی promise بررسی کردیم.
اگر می خواهید در مورد دستورات JavaScript بیشتر بیاموزید ، به آموزش درک، اتصال ، فراخوانی و اعمال در JavaScript و فهم Map و تنظیم آبجکت ها در آموزش های JavaScript مراجعه کنید.

 

از این لینک ها زیر می توانید آمورش های بیشتری برای لینوکس پیدا کنید :

نحوه نصب Nginx در CentOS 8  –  استفاده از Cron برای خودکارسازی کارها در اوبونتو 18

پکیج کردن و انتشار برنامه Snap در اوبونتو 18 – نصب و استفاده ازRadamsa برای فوز کردن برنامه ها روی Ubuntu 18

استقرارهای تولید Node.js خود را با Shipit در CentOS 7 –  نحوه راه اندازی Eclipse Theia Cloud IDE Platform در Debian 10

چگونگی استفاده از migrations و seeders دیتابیس  –  نحوه نصب Docker Compose در Debian 10

نحوه نصب R روی اوبونتو 18.04 – چگونه می توان با کتابخانه (library) درخواست ها در پایتون شروع به کار کرد

چگونه می توان هاست های مجازی Apache را در اوبونتو 18.04  –  نحوه اجرای صفحه گذاری در MySQL با PHP روی اوبونتو 18.04

نصب پشته Nginx، MySQL، PHP LEMP در CentOS 8 – نحوه تنظیم پلتفرم Eclipse Theia Cloud IDE در CentOS 7

نحوه نصب پشته یا استک Nginx ، MySQL ، PHP LEMP  –  بسته بندی برنامه Laravel 6 برای توسعه با Docker Compose

مراحل ایمن سازی Apache HTTP در FreeBSD 12  – بهینه سازی درخواست های MySQL با ذخیره سازی ProxySQL در اوبونتو 16

درک Objectهای Map و Set در JavaScript  –  استفاده از Ansible برای نصب و راه اندازی وردپرس با LAMP در اوبونتو 18

نحوه راه اندازی Eclipse Theia Cloud IDE در اوبونتو  –  چگونه می توان پلتفرم کد سرور Cloud IDE را در اوبونتو 18.04

نحوه استفاده از Cron برای خودکارسازی کارها در CentOS 8   –  چگونه می توان از رول های ansible برای انتزاع محیط زیرساختی

نحوه نوشتن کد ناهمگام (غیر همزمان) در Node.js –  نحوه پیکربندی یک خوشه Galera با MySQL در سرورهای اوبونتو 18

راه اندازی اولیه سرور با CentOS 8 –   تهیه نسخه پشتیبان و بازیابی یک خوشه Kubernetes

نحوه تنظیم کلیدهای SSH در CentOS 8 –  نحوه نصب و استفاده از PostgreSQL در CentOS 7

نحوه ساختن یک برنامه Node.js با Docker  Quickstart  –  چگونه می توان پلتفرم Eclipse Theia Cloud IDE را روی اوبونتو

چگونه می توان هاست های مجازی Apache را در اوبونتو  –  مدیریت DNS با استفاده از DNSControl در Debian 10

نحوه تایید صحت رمز عبور با Apache در اوبونتو 18.04 –  چگونه می توان پلتفرم Cloud IDE کد سرور را روی CentOS 7

نحوه نصب و استفاده از TimescaleDB در CentOS 7 – نحوه نصب Apache Kafka در Debian 10

نحوه تایید صحت رمز عبور با Apache در اوبونتو 18.04  –  نحوه نصب وردپرس با OpenLiteSpeed ​​در اوبونتو 18.04

 

 

کلمات کلیدی خرید سرور

خرید vps – خرید سرور مجازی – خرید سرور – سرور هلند – فروش vps – سرور مجازی آمریکا – خریدvps – سرور مجازی هلند – فروش سرور مجازی – سرور آمریکا – vps – سرور مجازی انگلیس – سرور مجازی آلمان – سرور مجازی کانادا – خرید vps آمریکا – خرید وی پی اس – سرور – خرید سرور مجازی هلند – vps خرید – سرور مجازی فرانسه – سرور مجازی هلند – خرید vps آمریکا – خرید سرور مجازی ارزان هلند – vps – خرید vps هلند – خرید سرور مجازی آمریکا – خرید vps فرانسه – تست vps – سرور مجازی تست – سرور مجازی ویندوز – ارزانترین vps – خرید وی پی اس – vps ارزان –