Hossein Yusuf-zadeh
Hossein Yusuf-zadeh
خواندن ۲ دقیقه·۶ سال پیش

جریان ها در Reactive Programming

سلام. این نوشته یک کپی بدون نقص از سایت کیوی است. فقط برای رونوشت داشتن شخصی این جا منتشر می شود! با تشکر از وب سایت خوب کیوی.

در این نوشته از کد های ASCII برای نشون دادن جریا ها و اینکه چه اطلاعاتی رو درون خودشون دارن استفاده میشه. به عنوان مثال دیاگرامی که در مطلب قبلی دیدید رو به این صورت نشون میدیم

--a---b-c---d---X---|->

a, b, c, d are emitted values

X is an error

| is the 'completed' signal

---> is the timeline

و همونطور که نوشته شده:

  • a, b, c, d مقادیری هستن که توسط جریان (Stream) پخش میشن.
  • X به معنای یک خطاست.
  • | سیگنالی هستش که به عنوان پایان یافتن جریان میشه در نظر گرفتش.
  • —> هم نشون دهنده ی زمان هست.

از اونجایی که حتما تا الان با معنی این پیام ها آشنایی پیدا کردید مستقیم سراغ  یک مثال میریم. قصد داریم با استفاده از جریان OnClick، یک جریان جدید ایجاد کنیم که هدف اون شمردن تعداد کلیک هاست. به صورت کلی در کتابخانه های Reactive، هر stream تعداد زیادی متد داره که میشه به متد های map، filter و scan اشاره کرد. وقتی یکی از این متد ها صدا زده میشه، در واقع جریان جدیدی بر اساس جریان قدیم ساخته  و عملیات روی اون انجام داده میشه و بهیچ وجه جریان قدیمی رو تغییر نمیده. به این خاصیت تغییر ناپذیری ( immutability ) گفته میشه، همین خاصیت باعث میشه که بتونیم چندین متد رو به صورت زنجیر وار پشت سر هم استفاده کنیم. مثلا : clickStream.map(f).scan(g)

clickStream: ---c----c--c----c------c-->

vvvvv map(c becomes 1) vvvv

---1----1--1----1------1-->

vvvvvvvvv scan(+) vvvvvvvvv

counterStream: ---1----2--3----4------5-->

  1. در کد بالا c به عنوان click در نظر گرفته شده.
  2. با استفاده از متد map جریان جدیدی رو ایجاد می کنیم که در اون هر کلیک به عنوان ۱ در نظر گرفته میشه.
  3. با استفاده از متد scan، جریان جدیدی ساخته میشه که کار اون شمردن تعداد ۱ ها در جریان قبلی هست.
  4. در پایان ما جریان جدیدی با نام counterStream ایجاد کردیم که تعداد کلیک ها رو بر می گردونه.

برای نشون دادن قدرت واقعی Reactive، بیاید تعداد کلیک های چندتایی (دابل کلیک و بیشتر از اون) رو پیدا کنیم. اگر بخوایم این کار رو با استفاده از روش سنتی انجام بدیم با مشکلات خیلی زیادی رو برو میشیم اما با استفاده از قدرت Reactive Programming کار برای ما بسیار ساده تر میشه. شکل زیر رو در نظر بگیرید:

جریان ها در Reactive Programming
جریان ها در Reactive Programming

مستطیل های خاکستری، متد هایی هستن که با استفاده از جریان قبلی، جریان جدیدی رو می سازن. ابتدا با استفاده از متد buffer(stream.throttle(250ms) کلیک هایی که فاصله ی اونها کمتر از ۲۵۰ میلی ثانیه هست رو در یک لیست قرار میدیم ( نگران نفهمیدن کد ها نباشین، در این مطلب ما فقط قصد داریم با جریان ها و متد هاشون آشنا بشیم). بعد از ساخته شدن جریان دوم با استفاده از متد map جریان جدیدی می سازیم که تعداد اعضای هر لیست رو برمی گردونه. در پایان هم با استفاده از filter، جریان جدیدی می سازیم که عدد های بزرگتر یا مساوی ۲ رو نشون میده.

برنامه نویسیreactive programingphp
شاید از این پست‌ها خوشتان بیاید