درخدمت شما هستیم با آموزش 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 ساده داشته باشیم که 2 عدد را اضافه می کند ، اما اجرای روش را در نقاط مختلف متوقف نگه می داریم. تا نشان دهیم چگونه می توان از مولدها استفاده کرد.
1 2 3 4 5 6 7 8 9 10 11 12 |
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 را فراخوانی کنیم ، که در مرحله 4 انجام خواهد شد. در این مرحله مقدار x=6 می شود و اجرای تابع متوقف می شود.
- اینجاست که ما ابتدا تابع Generator را صدا می کنیم و مقدار 5 را به تابع Add خود ارسال می کنیم. این مقدار در پارامتر x از تابع Add ما جایگزین می شود.
- هنگامی که ما تابع () Next را فراخوانی می کنیم ، تابع ()Add اجرا را از سر می گیرد. هنگامی که عبارت بعدی (var y= yield(null اجرا شود ، تابع () Add مجدداً اجرا را متوقف می کند.
- اکنون پس از فراخوانی دوباره تابع بعدی () Next، عبارت های بعدی اجرا می شوند و مقدار ترکیبی از x = 5 و y = 6 اضافه می شود و برمی گردد.
توابع Callbacks در مقابل Generator ها در نود جی اس
از Generator ها برای حل مسئله ای که به عنوان جهنم برگشت پذیر شناخته می شود ، استفاده می شود. گاهی اوقات توابع برگشت پذیر در حین توسعه یک برنامه Node.js تو در تو می شوند که استفاده از توابع برگشتی را بسیار پیچیده می کند.
این جایی است که Generator ها مفید هستند. یکی از متداول ترین نمونه های این کار هنگام ایجاد توابع تایمر است. بیایید مثال زیر را ببینید که چگونه مولدها می توانند اثبات کنند که از طریق فراخوان بازگشتی مفید هستند. مثال ما فقط یک تابع ساده با تأخیر زمان ایجاد خواهد کرد. سپس می خواهیم این تابع را با تاخیر 1000 ، 2000 و 3000 میلی ثانیه بنامیم.
مرحله 1) تابع برگشتی خود را با کد تأخیر زمان لازم تعریف کنید.
1 2 3 4 5 6 7 8 |
function Timedelay(ptime, callback) { setTimeout(function() { callback("Pausing for " + ptime); }, time); } |
توضیح کد:
- در اینجا ما در حال ایجاد تابعی به نام Timedelay با پارامتری به نام ptime هستیم. این تأخیر زمانی لازمی است که می خواهیم در برنامه خود معرفی کنیم.
- مرحله بعدی فقط ایجاد یک پیام است که به کاربر نمایش خواهد داد که می گوید این برنامه برای این تعداد میلی ثانیه مکث می کند.
مرحله 2) اگر ما بخواهیم فراخوانی بازگشتی را، ترکیب کنیم به کد زیر نگاه کنید. فرض کنید ما می خواهیم فراخوانی بازگشتی را با مقدار 1000 ، 2000 و 3000 میلی ثانیه ترکیب کنیم ، کد زیر نشان می دهد که چگونه ما نیاز به اجرای این موارد با استفاده از فراخوانی بازگشتی داریم.
1 2 3 4 5 6 7 8 9 10 11 12 |
Timedelay(1000, function(message) { console.log(msg); Timedelay(2000, function(message) { console.log(msg); Timedelay(3000, function(message) { console.log(msg); }) }) }) |
توضیح کد:
- ما در حال صدا زدن Timedelay به عنوان یک فراخوانی بازگشتی با مقدار 1000 هستیم.
- بعد می خواهیم دوباره تابع Timedelay با مقدار 2000 را صدا بزنیم.
- در آخر ، ما می خواهیم دوباره تابع Timedelay را با مقدار 3000 صدا بزنیم.
از کد بالا می بینید که می خواهیم تابع ما چندین بار صدا زده شود.
مرحله 3) حالا بیایید ببینیم چگونه با استفاده از مولدها همان کد را پیاده سازی کنیم. از کد زیر می توانید ببینید که اجرای تابع Timedelay با استفاده از Generator ها چقدر ساده شده است.
1 2 3 4 5 |
function* Messages() { console,log(yield(Timedelay(1000, function(){}))); console,log(yield(Timedelay(2000, function(){}))); console,log(yield(Timedelay(3000, function(){}))); } |
توضیح کد:
- ما ابتدا یک تابع Generator را تعریف می کنیم که برای صدا زدن تابع Timedelay استفاده می شود.
- ما در حال فراخوانی تابع Yield به همراه تابع Timedelay با مقدار 1000 به عنوان پارامتر هستیم.
- سپس ما از تابع Yield به همراه تابع Timedelay با مقدار 2000 به عنوان پارامتر فراخوانی می کنیم.
- در آخر ، ما تابع Yield را به همراه تابع Timedelay با مقدار 3000 به عنوان پارامتر فراخوانی می کنیم.
خلاصه
از Generator ها نیز می توان برای کاهش مشکلات مربوط به توابع برگشتی تو در تو استفاده کرد و در از بین بردن آنچه به عنوان جهنم فراخوانی بازگشتی شناخته می شود ، کمک کرد. Generator ها برای متوقف کردن پردازش یک تابع استفاده می شوند. این با استفاده از روش ” yield” در تابع ناهمزمان انجام می شود.
لیست تمامی جلسات آموزش Node.js
- آموزش Node.js در ۳ روز: آشنایی با Node.js
- آموزش دانلود و نصب Node.js -NPM در ویندوز
- آموزش Node.js در ۳ روز: ایجاد،انتشار،گسترش و مدیریت در Node.js
- آموزش HTTP در Node.js + ایجاد سرور و دریافت داده
- آموزش فریم ورک Express در Node.js در ۱۰ دقیقه
- آموزش promise در برنامه نویسی Node.js
- آموزش تولید promise با کتابخانه BlueBird در Node.js
- آموزش Generators در Node.js و مقایسه با توابع Callbacks
- آموزش جریان داده یا Streams در Node.js : کار با Filestream و Pipes در Node.js
- آموزش تست Node.js با Jasmine
- تفاوت Node.Js و AngulrJS
- تفاوت Node js و Python
- آموزش MongoDB در Node.js
- کتاب آموزش Node.js برای مبتدی ها بصورت کاملا گویا
راستی! برای دریافت مطالب جدید در کانال تلگرام یا پیج اینستاگرام سورس باران عضو شوید.
- منبع : سورس باران
- رمز فايل : www.sourcebaran.com
- انتشار: ۱۸ مهر ۱۳۹۸
دسته بندی موضوعات
- آموزش ارز دیجیتال
- آموزش برنامه نویسی
- آموزش متنی برنامه نویسی
- اطلاعیه و سایر مطالب
- پروژه برنامه نویسی
- رپورتاژ
- فروشگاه
- فیلم های آموزشی
- ++C
- ADO.NET
- Adobe Flash
- Ajax
- AngularJS
- apache
- ARM
- Asp.Net
- ASP.NET MVC
- AVR
- Bootstrap
- CCNA
- CCNP
- CMD
- CSS
- Dreameaver
- EntityFramework
- Go
- HTML
- IOS
- jquery
- Linq
- Mysql
- Oracle
- PHP
- PHPMyAdmin
- Rational Rose
- silver light
- SQL Server
- Stimulsoft Reports
- Telerik
- UML
- VB.NET&VB6
- WPF
- Xml
- آموزش های پروژه محور
- اتوکد
- الگوریتم تقریبی
- امنیت
- اندروید
- اندروید استودیو
- بک ترک
- بیسیک فور اندروید
- پایتون
- جاوا
- جاوا اسکریپت
- جوملا
- دلفی
- دوره های رایگان پیشنهادی
- زامارین
- سئو
- ساخت CMS
- سی شارپ
- شبکه و مجازی سازی
- طراحی الگوریتم
- طراحی بازی
- طراحی وب
- فتوشاپ
- فریم ورک codeigniter
- فلاتر
- کانستراکت
- کریستال ریپورت
- لاراول
- معماری کامپیوتر
- مهندسی اینترنت
- هوش مصنوعی
- یونیتی
- کتاب های آموزشی
- Android
- ASP.NET
- AVR
- LINQ
- php
- Workflow
- اچ تی ام ال
- بانک اطلاعاتی
- برنامه نویسی سوکت
- برنامه نویسی موبایل
- پاسکال
- پایان نامه
- پایتون
- جاوا
- جاوا اسکریپت
- جی کوئری
- داده کاوی
- دلفی
- رباتیک
- سئو
- سایر کتاب ها
- سخت افزار
- سی اس اس
- سی پلاس پلاس
- سی شارپ
- طراحی الگوریتم
- فتوشاپ
- مقاله
- مهندسی نرم افزار
- هک و امنیت
- هوش مصنوعی
- ویژوال بیسیک
- نرم افزار و ابزار برنامه نویسی
- وردپرس