Dart Programming

Dart အခြေခံများ Part 2 (Streams)

မိတ်ဆက်

Dart Programming Language ကို လေ့လာတဲ့အခါ Programming Language အနေနဲ့က လေ့လာရလွယ်ပါတယ်။ လေ့လာရခက်တာက Asynchronous Programming အပိုင်းတွေ ဖြစ်ပါတယ်။ အဲဒီအထဲမှာမှ Stream အပိုင်းက ပိုပြီး နားလည်ရခက်ပါတယ်။ ဒီအပိုင်းမှာတော့ Stream အကြောင်းကို လေ့လာကြမှာ ဖြစ်ပါတယ်။

Streams: Asynchronous Programming with Dart

Streams နဲ့ Futures ဘာကွာလဲဆိုတာ အရင်လေ့လာဖို့ လိုပါတယ်။ Futures ကတော့ Asynchronous Tasks တွေကို Async – Await နဲ့ စောင့်ပြီး ပြုလုပ်စေတာ ဖြစ်ပါတယ်။

Futures: Async … await

Stream မှာတော့ အဲဒီလိုမဟုတ်တော့ပါဘူး။ Task တစ်ခုတည်းက ထွက်လာတဲ့ Data တွေကို စောင့်ဖတ်တာ ဖြစ်ပါတယ်။ ကျွန်တော်တို့ ချာလီချက်ပလင်ကားထဲက မူလီကြပ်တာကို မှတ်မိဦးမယ် ထင်ပါတယ်။ ထွက်လာတဲ့ မူလီတွေကို စောင့်ပြီး ကြပ်ပေးရပါတယ်။

Charlie Chaplin – Modern Times

 Stream ထဲကနေ မူလီထွက်လာပြီဆိုတာနဲ့ လှမ်းကြပ်ပေးဖို့ လိုပါတယ်။ အဲဒါနဲ့ ပုံစံတူပါတယ်။ Stream ဆိုတာ Task တစ်ခုတည်းမှာ ရှိတဲ့ Sequence of Asynchronous Events တွေ ဖြစ်ပါတယ်။ Stream ဟာ asynchronous sequence of data တွေကို ဖတ်တဲ့နေရာမှာ အများကြီး အသုံးဝင်ပါတယ်။

Dart Stream

Stream အနေနဲ့ Error တွေလဲ ထုတ်ပြန်ပေးမှာ ဖြစ်သလို Data တွေလဲ ထုတ်ပေးပါလိမ့်မယ်။ နောက်ဆုံးမှာ Done Event ထုတ်လိုက်မှသာ Task တစ်ခု ရပ်သွားပါလိမ့်မယ်။

ကျွန်တော်တို့ Flutter နဲ့ ရေးတဲ့အခါမှာလဲ UI တွေကို SKIA ဆိုတဲ့ Graphic Engine ကို အသုံးပြုပြီး Generate လုပ်ပြီး သုံးတာ ဖြစ်တဲ့အတွက် StateFull Widget တွေမှာ ဒေတာချိန်းတိုင်း UI ကို Re-render ပြုလုပ်ပြီး သုံးရပါတယ်။ အဲဒီနေရာတွေမှာ Data တွေကို Update ပြုလုပ်ပေးဖို့ Stream ဟာ အင်မတန် အသုံးဝင်ပါတယ်။ 

Flutter နဲ့ ရေးမယ်ဆိုရင် Stream ကို မဖြစ်မနေ သိထားဖို့ လိုအပ်ပါတယ်။

Key Terms

  • Stream : Asynchronous data events တွေရဲ့ Source တစ်ခုဖြစ်ပါတယ်။ Stream အနေနဲ့ အစဉ်လိုက် ဖြစ်နေတဲ့ ဖြစ်စဉ်တွေကို လက်ခံနိုင်ဖို့အတွက် အထောက်အပံပေးပါတယ်။ အဲဒီအပြင် အစဉ်လိုက် ဖြစ်နေတဲ့ ဖြစ်စဉ်တွေက ထွက်ပေါ်လာတဲ့ Result တွေကို ထုတ်ပေးပါလိမ့်မယ်။ အဲဒါတွေကတော့ Data Event (သူကတော့ အချက်အလက်တွေ ပါလာပါလိမ့်မယ်)၊ Error Event (တစ်ခုခုအမှားအယွင်းရှိတဲ့အခါ ထွက်လာမှာပါ)၊ နောက်ဆုံးမှာတော့ Done Event ထွက်လာပါလိမ့်မယ်။
  • Data Sequence: Data Sequence ဆိုတာကတော့ User-generated Event တွေကနေ ထွက်ပေါ်လာတဲ့ Data တွေ သို့မဟုတ် ဖိုင်တွေကဖတ်ရင်း ထွက်လာတဲ့ Data တွေ ဖြစ်ပါတယ်။ 
  • Async: ဒါကတော့ ထုံးစံအတိုင်း Async Task တွေကို ဖတ်ဖို့အတွက် ဖြစ်ပါတယ်။

Creating a Stream

ကျွန်တော်တို့ နမူနာလေးတစ်ခုလောက် ရေးကြည့်လိုက်ရအောင်

အပေါ်မှာက ကုဒ်မှာတော့ Event ကို စောင့်ဖမ်းပြီးမှ ထွက်လာတဲ့ Data ကို Print ထုတ်ပါတယ်။ 

နောက်တစ်ဆင့်မှာတော့ Event က ထွက်လာတဲ့ Data တွေ အားလုံးပေါင်းပြီးမှ Event တစ်ခုအနေနဲ့ ထုတ်ကြည့်မှာ ဖြစ်ပါတယ်။ printStream ကို အောက်ပါအတိုင်း ပြင်ကြည့်ပါမယ်။

ဒီတစ်ခါတော့ total တစ်ခုရဲ့ event ကိုပဲ စောင့်ဖမ်းပြီး print ထုတ်တာ မြင်ရပါလိမ့်မယ်။ 

Responding to Errors using Streams (Streams အသုံးပြုပြီး Errors များ တုန့်ပြန်ခြင်း)

ကျွန်တော် အပေါ်မှာ ပြောခဲ့သလို Data Event တွေ ရှိသလို Error Event တွေလဲ ရှိနိုင်ပါတယ်။ အဲဒီလို Error Event တွေကို ဘယ်လိုထုတ်မလဲဆိုတာ လေ့လာကြည့်ရအောင်။ ဒီနေရာမှာ Error တက်လာတာနဲ့ Stream ကို ရပ်တန့်လိုက်တာလဲ ဖြစ်နိုင်သလို Stream အနေနဲ့ Error Events တွေကို ဆက်လက်ထုတ်ပြန်ပြီး တစ်ခြား Data Event တွေကို ဆက်ထုတ်ပြန်နေတာလဲ ဖြစ်နိုင်ပါတယ်။ ဥပမာ – API ကနေ Data တစ်ခုခြင်း ယူနေတယ်ဆိုပါစို့၊ ဒေတာ ပါလာတာလဲ ရှိသလို မပါလာတာလဲ ရှိနိုင်ပါတယ်။ ပါလာတဲ့အခါ Data Event ထုတ်ပေးပြီး မပါလာတဲ့အခါ Error Event ထုတ်ပေးဖို့ လိုအပ်မှာ ဖြစ်ပါတယ်။ ကျွန်တော်တို့ နမူနာရေးကြည့်ရအောင်

အပေါ်က Program ကို run ကြည့်မယ်ဆိုရင် i == 5 နဲ့ ညီသွားတဲ့အခါ -1 ဆိုပြီး exit ထွက်ပါလိမ့်မယ်။ ဒါကတော့ Error တက်ပြီး ရပ်သွားစေတဲ့ ပုံစံဖြစ်ပါတယ်။ listen နဲ့ ရေးမယ်ဆိုရင်တော့ ဒီလိုရေးရမှာ ဖြစ်ပါတယ်။ ရေးရတာ ပိုပြီးလဲ စမတ်ကျပါတယ်။

ဒီ Program ရေးပြီးသွားတဲ့ အချိန်မှာတော့ အပေါ်က ပုံလေးကို ပြန်ကြည့်ရင် ပိုနားလည်နိုင်ပါတယ်။

ဆက်ပါဦးမယ်

References
Dart Streams

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