درخدمت شما هستیم با آموزش Generators در Node.js و مقایسه با توابع Callbacks از وب سایت آموزش برنامه نویسی سورس باران. در این جلسه که بخش هشتم آموزش Node.js است معرفی و آشنایی کامل با آموزش Generators در Node.js و مقایسه با توابع (کال بک) Callbacks را خواهیم داشت. با ما همراه باشید…
Generator ها در نود جی اس
- Generator ها اخیرا در Node.js بسیار مشهور شده اند و احتمالاً به دلیل کارهایی است که قادر به انجام آن هستند. Generators ، توابع اجرایی هستند که می توانند معلق و در مرحله بعد از سر گرفته شوند.
- Generator ها هنگام انجام مفاهیمی مانند lazy execution مفید هستند. این اساساً بدان معنی است که با تعلیق اجرا و از سرگیری مجدد در خواست ، فقط زمانی که به آن نیاز داریم می توانیم مقادیر را به دست بیاوریم.
Generator ها دو روش اصلی زیر دارند:
Yield method.1 (روش عملکرد) – به تابعی گفته می شود که اجرای تابع را در یک خط خاص که روش عملکرد نامیده می شود متوقف کند.
Next method.2 (روش بعدی) – این روش از برنامه اصلی برای از سرگیری اجرای یک تابعی که دارای یک روش عملکرد (Yield method) است ، نامیده می شود. اجرای تابع تا روش عملکرد بعدی یا تا پایان روش ، ادامه خواهد یافت.
بیایید مثالی از چگونگی استفاده از Generator ها را بررسی کنیم. در مثال، ما می خواهیم یک تابع Add ساده داشته باشیم که ۲ عدد را اضافه می کند ، اما اجرای روش را در نقاط مختلف متوقف نگه می داریم. تا نشان دهیم چگونه می توان از مولدها استفاده کرد.
function* Add(x) { yield x + 1; var y = yield(null); y = 6 return x + y; } var gen = Add(5); gen.next(); gen.next();
توضیح کد:
- اولین قدم تعریف “تابع” مولد است. توجه داشته باشید که این کار با اضافه کردن “*” به کلید واژه تابع انجام می شود. سپس تابعی به نام Add را تعریف می کنیم که پارامتر x را در بر می گیرد.
- کلمه کلیدی yield، مخصوص Generator ها است. این باعث می شود آن را به یک ساختار قدرتمند برای متوقف کردن تابع در وسط هر چیزی تبدیل کنید. بنابراین در اینجا ، اجرای تابع متوقف می شود تا زمانی که تابع () Next را فراخوانی کنیم ، که در مرحله ۴ انجام خواهد شد. در این مرحله مقدار x=6 می شود و اجرای تابع متوقف می شود.
- اینجاست که ما ابتدا تابع Generator را صدا می کنیم و مقدار ۵ را به تابع Add خود ارسال می کنیم. این مقدار در پارامتر x از تابع Add ما جایگزین می شود.
- هنگامی که ما تابع () Next را فراخوانی می کنیم ، تابع ()Add اجرا را از سر می گیرد. هنگامی که عبارت بعدی (var y= yield(null اجرا شود ، تابع () Add مجدداً اجرا را متوقف می کند.
- اکنون پس از فراخوانی دوباره تابع بعدی () Next، عبارت های بعدی اجرا می شوند و مقدار ترکیبی از x = 5 و y = 6 اضافه می شود و برمی گردد.
توابع Callbacks در مقابل Generator ها در نود جی اس
از Generator ها برای حل مسئله ای که به عنوان جهنم برگشت پذیر شناخته می شود ، استفاده می شود. گاهی اوقات توابع برگشت پذیر در حین توسعه یک برنامه Node.js تو در تو می شوند که استفاده از توابع برگشتی را بسیار پیچیده می کند.
این جایی است که Generator ها مفید هستند. یکی از متداول ترین نمونه های این کار هنگام ایجاد توابع تایمر است. بیایید مثال زیر را ببینید که چگونه مولدها می توانند اثبات کنند که از طریق فراخوان بازگشتی مفید هستند. مثال ما فقط یک تابع ساده با تأخیر زمان ایجاد خواهد کرد. سپس می خواهیم این تابع را با تاخیر ۱۰۰۰ ، ۲۰۰۰ و ۳۰۰۰ میلی ثانیه بنامیم.
مرحله ۱) تابع برگشتی خود را با کد تأخیر زمان لازم تعریف کنید.
function Timedelay(ptime, callback) { setTimeout(function() { callback("Pausing for " + ptime); }, time); }
توضیح کد:
- در اینجا ما در حال ایجاد تابعی به نام Timedelay با پارامتری به نام ptime هستیم. این تأخیر زمانی لازمی است که می خواهیم در برنامه خود معرفی کنیم.
- مرحله بعدی فقط ایجاد یک پیام است که به کاربر نمایش خواهد داد که می گوید این برنامه برای این تعداد میلی ثانیه مکث می کند.
مرحله ۲) اگر ما بخواهیم فراخوانی بازگشتی را، ترکیب کنیم به کد زیر نگاه کنید. فرض کنید ما می خواهیم فراخوانی بازگشتی را با مقدار ۱۰۰۰ ، ۲۰۰۰ و ۳۰۰۰ میلی ثانیه ترکیب کنیم ، کد زیر نشان می دهد که چگونه ما نیاز به اجرای این موارد با استفاده از فراخوانی بازگشتی داریم.
Timedelay(1000, function(message) { console.log(msg); Timedelay(2000, function(message) { console.log(msg); Timedelay(3000, function(message) { console.log(msg); }) }) })
توضیح کد:
- ما در حال صدا زدن Timedelay به عنوان یک فراخوانی بازگشتی با مقدار ۱۰۰۰ هستیم.
- بعد می خواهیم دوباره تابع Timedelay با مقدار ۲۰۰۰ را صدا بزنیم.
- در آخر ، ما می خواهیم دوباره تابع Timedelay را با مقدار ۳۰۰۰ صدا بزنیم.
از کد بالا می بینید که می خواهیم تابع ما چندین بار صدا زده شود.
مرحله ۳) حالا بیایید ببینیم چگونه با استفاده از مولدها همان کد را پیاده سازی کنیم. از کد زیر می توانید ببینید که اجرای تابع Timedelay با استفاده از Generator ها چقدر ساده شده است.
function* Messages() { console,log(yield(Timedelay(1000, function(){}))); console,log(yield(Timedelay(2000, function(){}))); console,log(yield(Timedelay(3000, function(){}))); }
توضیح کد:
- ما ابتدا یک تابع Generator را تعریف می کنیم که برای صدا زدن تابع Timedelay استفاده می شود.
- ما در حال فراخوانی تابع Yield به همراه تابع Timedelay با مقدار ۱۰۰۰ به عنوان پارامتر هستیم.
- سپس ما از تابع Yield به همراه تابع Timedelay با مقدار ۲۰۰۰ به عنوان پارامتر فراخوانی می کنیم.
- در آخر ، ما تابع Yield را به همراه تابع Timedelay با مقدار ۳۰۰۰ به عنوان پارامتر فراخوانی می کنیم.
خلاصه
از Generator ها نیز می توان برای کاهش مشکلات مربوط به توابع برگشتی تو در تو استفاده کرد و در از بین بردن آنچه به عنوان جهنم فراخوانی بازگشتی شناخته می شود ، کمک کرد. Generator ها برای متوقف کردن پردازش یک تابع استفاده می شوند. این با استفاده از روش ” yield” در تابع ناهمزمان انجام می شود.
The post آموزش Generators در Node.js و مقایسه با توابع Callbacks appeared first on آموزش برنامه نویسی.