Dart Programming

Dart အခြေခံများ Part 3 (Streams အဆက်)

အရင်အပိုင်းတွေကို ဖတ်ချင်ရင်တော့

Streams အမျိုးအစားများ

Streams အမျိုးအစားအနေနဲ့ နှစ်မျိုးရှိပါတယ်။ အဲဒါတွေကတော့

  • Single subscription – Single Subscription Streams ကိုတော့ Event တွေကို အစီအစဉ်အတိုင်း ဖြစ်စေချင်တဲ့အခါတွေမှာ သုံးပါတယ်။ ဥပမာ – 100M file တစ်ခုကို download ချတဲ့အခါ  10M ရောက်တဲ့အခါ တစ်ခါ၊ 20M ရောက်တဲ့အခါ တစ်ခါ စသည်ဖြင့် Event တွေ Trigger စေချင်ရင် သုံးပါတယ်။ ပြီးသွားတဲ့ Event တွေကို ပြန်ပြီး listen ရင်တော့ Exception Throw ပါလိမ့်မယ်။ အနီးစပ်ဆုံး ဥပမာဆိုရင်တော့ တီဗီအစီအစဉ်တစ်ခုကို စောင့်ကြည့်နေသလိုပေါ့။ ကိုယ်ကြည့်ချင်တဲ့ ရုပ်ရှင်ကို ပြတဲ့အချိန်မှာ ကြည့်၊ နောက်ကျသွားရင်တော့ ကြည့်မရတော့ပါဘူး။
  • Broadcast (Multiple Subscribers) – Broadcast Streams တွေကတော့ Subscriber တွေ အများကြီးအတွက် ဖြစ်ပါတယ်။ Subscriber က စပြီး listen လိုက်တာနဲ့ Event တွေကို စောင့်ကြည့်လို့ရပါပြီ။ Netflix မှာ Subscribe လုပ်လိုက်တဲ့ ပုံစံတူပါတယ်။ Broadcast Stream တွေကို အကြိမ်ကြိမ် ပြန် Listen လို့ရပါတယ်။ Netflix မှာ ကိုယ့်စိတ်ကြိုက်ဇာတ်ကားကို အကြိမ်ကြိမ် ပြန်ကြည့်နိုင်သလိုပေါ့။

Using Subscription’s Handler

Subscription Handler ကို အသုံးပြုပြီး ဘယ်လိုရေးမလဲဆိုတာ လေ့လာကြည့်ရအောင်

အပေါ်မှာ ရေးထားတာကတော့ listen ပုံစံကို Subscription ပုံစံနဲ့ ပြောင်းရေးထားတာပါ။ Single Subscription ပုံစံပဲ သုံးတာပါ။

Single Subscription ၏ အသုံးပြုပုံများ

.where() အသုံးပြုပုံ

အခြား Operation များ

  • first: stream ရဲ့ ပထမဦးဆုံး Event ကို ဖော်ထုတ်ရန်
  • last: stream ရဲ့  နောက်ဆုံး Event ကို ဖော်ထုတ်ရန်
  • length: Stream ရဲ့  length ကို ဖော်ထုတ်ရန်
  • isEmpty: Stream က ဘာမှမရှိဘူးလား ရှိသလားကို စစ်ရန်

အခြား Operation တွေကို သုံးပြီး ရေးကြည့်လိုက်ရအောင်

Broadcast Streams Opearations

ကျွန်တော်တို့ အပေါ်မှာ ရေးခဲ့ Single Subscription Stream ကို Broadcast Stream အနေနဲ့ ပြောင်းရေးလို့ ရပါတယ်။ နှစ်ခုနှိုင်းယှဉ်ပြီး လေ့လာကြည့်ရအောင်

အဲဒီ နှစ်ခု ဘာကွာသွားလဲဆိုရင် ကျွန်တော်တို့အနေနဲ့ Stream အသစ်တွေ တစ်ခုပြီးတစ်ခု ဖန်တီးနေစရာ မလိုတော့တာပါ။ Broadcast Streams အနေနဲ့ Subscriber တွေ အများကြီးရှိခွင့်ရှိသလို အကြိမ်ကြိမ် listen လုပ်ခွင့်လဲ ရှိနေပါတယ်။

Broadcast Streams Operation တွေမှာ တစ်ခြား method တွေလဲ ရှိပါသေးတယ်။ နမူနာရေးပြီး လေ့လာကြည့်ရအောင်

.take() ဆိုတဲ့ method ကတော့ ကိုယ်ဘယ်လောက်အထိပဲ ယူမယ်ဆိုတာ ပြောပြီး ကန့်သတ်လိုက်တာပါ။ .skip() ကတော့ ဘယ်လောက်ကို ကျော်လိုက်မယ်ဆိုတာမျိုး ပြောလိုက်တာပါ။ ဥပမာ – (၂)ကို ကျော်လိုက်မယ်ဆိုရင် ၃ ကနေစပြီး ရယူသဘော ဖြစ်သွားပါမယ်။ .takeWhile() ကတော့ take နဲ့ တူပါတယ်။ ဒါပေမယ့် သူက Condition ပါလာပါတယ်။ အပေါ်မှာ ရေးထားတဲ့ ကုဒ်ကို လေ့လာကြည့်မယ်ဆိုရင် takeWhile ကို x > 0 && x < 3 အနေနဲ့ ရွေးထားပါတယ်။ skipWhile() ဆိုတာလဲ skip နဲ့ တူပါတယ်။ Condition ပိုလာပါတယ်။

ရှေ့ဆက်ပြီး StreamController များအကြောင်း StreamTransforer များအကြောင်း ရှေ့ဆက်ပါမယ်​​​။

References
– Dart Streams

ယခုဆောင်းပါးအား ဤနေရာမှ ဘာသာပြန်ထားခြင်း ဖြစ်ပါသည်။ Creative Commons License အတိုင်း ဖြစ်ပါသည်။