سلام. این نوشته یک کپی بدون نقص از سایت کیوی است. فقط برای رونوشت داشتن شخصی این جا منتشر می شود! با تشکر از وب سایت خوب کیوی.
در این نوشته از کد های ASCII برای نشون دادن جریا ها و اینکه چه اطلاعاتی رو درون خودشون دارن استفاده میشه. به عنوان مثال دیاگرامی که در مطلب قبلی دیدید رو به این صورت نشون میدیم
--a---b-c---d---X---|->
a, b, c, d are emitted values
X is an error
| is the 'completed' signal
---> is the timeline
و همونطور که نوشته شده:
از اونجایی که حتما تا الان با معنی این پیام ها آشنایی پیدا کردید مستقیم سراغ یک مثال میریم. قصد داریم با استفاده از جریان 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-->
برای نشون دادن قدرت واقعی Reactive، بیاید تعداد کلیک های چندتایی (دابل کلیک و بیشتر از اون) رو پیدا کنیم. اگر بخوایم این کار رو با استفاده از روش سنتی انجام بدیم با مشکلات خیلی زیادی رو برو میشیم اما با استفاده از قدرت Reactive Programming کار برای ما بسیار ساده تر میشه. شکل زیر رو در نظر بگیرید:
مستطیل های خاکستری، متد هایی هستن که با استفاده از جریان قبلی، جریان جدیدی رو می سازن. ابتدا با استفاده از متد buffer(stream.throttle(250ms)
کلیک هایی که فاصله ی اونها کمتر از ۲۵۰ میلی ثانیه هست رو در یک لیست قرار میدیم ( نگران نفهمیدن کد ها نباشین، در این مطلب ما فقط قصد داریم با جریان ها و متد هاشون آشنا بشیم). بعد از ساخته شدن جریان دوم با استفاده از متد map جریان جدیدی می سازیم که تعداد اعضای هر لیست رو برمی گردونه. در پایان هم با استفاده از filter، جریان جدیدی می سازیم که عدد های بزرگتر یا مساوی ۲ رو نشون میده.