Nima Mohamadian
Nima Mohamadian
خواندن ۲ دقیقه·۶ سال پیش

آموزش مقدماتی دارت Dart - قسمت ۱۰

این قسمت کار با داده های غیر همزمان


همچنین میتونید از قسمت اول این آموزش شروع کنید:

https://virgool.io/@novonimo/آموزش-مقدماتی-دارت-dart-قسمت-۱-vrd1jjuoble1


آموزش مقدماتی دارت
آموزش مقدماتی دارت


برخلاف جاواسکریپت ، اینجا از واژه stream برای نمایش داده های غیر همزمان به کار میره. هر رویدادی که به شکل داده باشه یک المان از stream هست و در صورتی که خطایی هم باشه به شکل هشدار ظاهر میشه که بگه چیزی به صورت غیر موفق بوده . وقتی یک جریان (stream) همه رویداد هارو حل کنه مقدار رویداد done رو به listener اعلام میکنه که به مفهوم رسیدن به نقطه پایان است.
جریان ها برای نمایش سری رویدادها در زمان خوندن اطلاعات از یک منبع اطالاعات به کار میرن. زمانهایی که با داده هایی مثل HTML سر و کار داریم Stream ها گزینه خوبی برای ما هستند.

برای اینکه موضوع Stream رو درک کنید، این کد رو بررسی کنید:

جریان stream
جریان stream


در انتهای کد و در کامنت ها میتونید نتیجه اجرای این کد رو ببینید.
برای نوشتن این کد از StreamController که یک interface هست کمک گرفتیم که کار کنترل رویداد های ورودی مارو مدیریت میکنه. برای به کار گرفتن یک رویداد داده و اضافه کردن داده به جریان داده ،‌ از متد add استفاده میکنیم.
از یک کلاس به همراه تایپ String استفاده کردیم که به برنامه اعلام کنیم که دقیقا نوع داده ما چیست.
همچنین میتونیم گوش به زنگ خطا هم باشیم و با قرار دادن addError یک داده که به شکل خطا هست رو بفرستیم.
همچنین میتونیم یک listener برای وضعیت done تعریف کنیم. این کار رو با اضافه کردن متد close به کدمون انجام میدیم. این رویداد هر زمانی که کار جریان تموم شد اجرا میشه ( و میشه به خاطر همین خاصیتش از یک تابع callback استفاده کنیم)


همین کد رو با میشه با async/await مجدد نوشت و refactor کرد:

جریان stream به صورت async/await
جریان stream به صورت async/await

دقت کنید که نتیجه کاملا یکسان هست!


توی دارت ما ۲ نوع جریان داریم:

  • جریان مفرد و تنها (single)
  • جریان گروهی (broadcast)

مثالی که الان بررسی کردیم به صورت single بود و اگر بخواهیم مثلا یک listener دیگه اضافه کنیم خطای زمان اجرا به ما میده.

با استفاده از جریان های گروهی (که البته به لحاظ لغوی معنی مورد نظر رو نمیده) میتونیم چندین listener بنویسیم. برای این منظور از متد asBroadcastStream استفاده میکنیم:

single & broadcast streams
single & broadcast streams

در نتیجه در خروجی :

Received data: Hello Received data again: Hello Received data: World Received data again: World


همچنین میتونیم از async/await برای گوش دادن به جریان داده ها استفاده کنیم:

استفاده از async/await در جریان داده
استفاده از async/await در جریان داده


جریان ها میتونن از iterable ها مثل لیست و ست هم ساخته بشن. برای مثال:

جریان با استفاده از لیست
جریان با استفاده از لیست

در نتیجه:

D a r t

از این خاصیت میشه خیلی استفاده ها کرد. مثلا من اینجا یک تایمر ساده ساختم که همین نتیجه رو نمایش میده البته هر حرف بعد از گذشت مدت زمانی روی صفحه ظاهر میشه:

استفاده از تایمر در جریان
استفاده از تایمر در جریان



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

https://virgool.io/iran-react-community/ری-اکت-رو-قورت-بده-۱-u8t5ysweyxyj
https://virgool.io/iran-react-community/نکات-طلایی-برای-توسعه-دهندگان-ری-اکت-نیتو-reactnative-قسمت-۱-l8kuhkrr98ps
https://virgool.io/@novonimo/فوت-و-فن-برنامه-نویسی-functional-با-جاواسکریپت-ujucyxjfn0zw




Contact With me:
https://t.me/nimamohamadian
https://www.facebook.com/nimamohamadian89
https://twitter.com/Nima_Mohamadian
https://www.linkedin.com/in/nima-mohamadian-57ba63123/

dartdartlanggoogledeveloperflutter
توسعه دهنده جاواسکریپت
شاید از این پست‌ها خوشتان بیاید