Kotlin

Bridge to Kotlin Part 7 (Extensions and Data Class)

အရင်အပိုင်းတွေ လေ့လာချင်တယ်ဆိုရင်

Extensions

Extension တွေနဲ့ ပတ်သက်ပြီး ကျွန်တော်တို့ အပေါ်မှာ စမ်းခဲ့တာ တစ်ခုရှိပါတယ်။ isOdd, isEven အတွက်ပါ။ အဲဒီအပြင် Array မှာတုန်းက လေ့လာခဲ့တဲ့ extension properties တို့ extension functions စတာတွေလဲ မှတ်မိကြဦးမယ် ထင်ပါတယ်။

Extensions တွေဟာ Kotlin မှာမှ အထောက်အပံ့ပေးလာတာ ဖြစ်တဲ့အတွက် Java ဖက်ကနေ ကြည့်မယ်ဆိုရင် static method ပုံစံရေးလိုက်တယ်လို့ ယေဘူယျ သတ်မှတ်လို့ရပါတယ်။

Extension functions

ကျွန်တော်တို့ အပေါ်တုန်းက ရေးခဲ့တာလေး ပြန်ကြည့်လိုက်ရအောင်

isEven() ဆိုတဲ့ function က Int မှာ မရှိပါဘူး။ အဲဒါကို ကျွန်တော်တို့က extension function အနေနဲ့ ထပ်သုံးလိုက်တာပါ။ Exntesion လုပ်ချင်တဲ့ class ကို ရှေ့မှာထားပြီး နောက်မှာ ကျွန်တော်တို့ လိုချင်တဲ့ function ကို ထပ်ရေးပါတယ်။ အဲဒီနေရာမှာ သတိထားရမှာပါ this keyword ပါ။ သူကျွန်တော်တို့ လက်ခံလိုက်တဲ့ receiver object ကို ညွှန်းပါတယ်။  

နောက်ထပ် ဥပမာ တစ်ခုကတော့ Array ထဲမှာ ရှိတဲ့ String တွေ အားလုံးပေါင်းပေးနိုင်တဲ့ combineAll() ဆိုတဲ့ extension function တစ်ခု ဖန်တီးတာပါ။ ဒီနေရာမှာ generic type parameter ကို အသုံးပြု ထားပါတယ်။ Java ကို သိပြီးဖြစ်တဲ့သူတွေကတော့ အလွယ်တကူ နားလည်နိုင်ပေမယ့် တစ်ခြား programming ဖက်က လာတဲ့သူတွေအတွက် အခက်အခဲ အနည်းငယ်ရှိနိုင်ပါတယ်။ အဲဒီအတွက် generic functions တွေအကြောင်း နောက်အခန်းတွေမှာ ရှင်းပြဖို့ ရှိပါတယ်။

အခုလို exntesion functions တွေ အသုံးပြုလို့ရလာတာ ကျွန်တော်တို့အတွက် အရမ်းကောင်းပါတယ်။ ဒါပေမယ့် တကယ်တန်း Android ရေးတဲ့အခါမှာ auto complete/ auto import ကိစ္စတွေမှာ ရောထွေးနိုင်တဲ့အတွက် သတိထားဖို့တော့ လိုပါလိမ့်မယ်။

Extensions တွေဟာ တကယ်တော့ သူတို့ extend လုပ်လိုက်တဲ့ class တွေကို ပြောင်းလိုက် ပြုပြင်လိုက်တာ မဟုတ်ပါဘူး။ ကျွန်တော်တို့ extension function တွေ ရေးလိုက်တယ်ဆိုရင် မူရင်း class မှာ member ထပ်ပေါင်းထည့်လိုက်တဲ့ပုံစံ မဟုတ်ပါဘူး။ dot နဲ့ ခေါ်လို့ရအောင် static ပုံစံနဲ့ lazy loading ပုံစံ သုံးပြီး ရေးလိုက်တာ ဖြစ်ပါတယ်။ ကျွန်တော်တို့အတွက် အများကြီး အသုံးဝင်မယ့် Kotlin ရဲ့ Feature တစ်ခု ဖြစ်ပါတယ်။

ကျွန်တော်တို့ Extensions နဲ့ ပတ်သက်ပြီး သိစရာတွေ အများကြီးရှိပါသေးတယ်။ လောလောဆယ်တော့ Android Development မှာ သုံးဖို့ ဒီလောက်ဆို လုံလောက်ပါပြီ။ ကျန်တာတွေကိုတော့ လိုအပ်လာတဲ့အခါ Kotlin Guide မှာ လေ့လာကြဖို့ လိုပါတယ်။

Data Classes

Data classes တွေကတော့ ကျွန်တော်တို့ Android မှာ မဖြစ်မနေ သုံးရမှာပါ။ Kotlin မှာ ရလာတဲ့ feature တစ်ခုဖြစ်တဲ့အပြင် ကျွန်တော်တို့အတွက် အချိန်ကုန်သက်သာအောင် အများကြီး စွမ်းဆောင် ပေးနိုင်ပါတယ်။

ကျွန်တော်တို့ Java မှာ POJO (Plain Old Java Object) ဆိုပြီး ရေးလေ့ရှိပါတယ်။ ဥပမာ –

အဲဒီလို getter, setter, constructor တွေနဲ့ ရှုပ်နေတဲ့ POJO Class ကို Kotlin မှာ အောက်မှာ ပြထားတဲ့အတိုင်း ရေးရုံနဲ့ ကိစ္စပြတ်ပါတယ်။

အဲဒါကို data class လို့ ခေါ်ပါတယ်။ အဲဒီလို Data Class တွေကို သုံးတဲ့အခါမှာ သိထားရမယ့် အချက်လေးတွေ လိုက်နာရမယ့် အချက်လေးတွေ ရှိပါတယ်။ အဲဒါတွေကတော့

  • Primary constructor တွေ အနေနဲ့ အနည်းဆုံး parameter တစ်ခုရှိဖို့ လိုအပ်ပါတယ်
  • Primary constructor မှာရှိတဲ့ parameters တွေအနေနဲ့ val (သို) var ဖြစ်ဖို့ လိုအပ်ပါတယ်
  • Data classes တွေဟာ abstract, open, sealed (သို့) inner class တွေ ဖြစ်လို့ မရပါဘူး
  • Data Class ထဲမှာ ပါဝင်တဲ့ properties တွေ အားလုံးအတွက် .equals()/hashCode()/toString() စတာတွေ အကုန်လုံး သုံးလို့ရအောင် စီစဉ်ပြီး ဖြစ်ပါတယ်
  • Data class အသစ်တစ်ခုကို လိုတာလောက် ပြောင်းပြီး အသစ်ဖန်တီးဖို့ copy() ဆိုတဲ့ function အသုံးပြုလို့ရပါတယ်။

Copy() က နမူနာ ရေးကြည့်ရအောင်

ပြောင်းချင်တာလေး ကွက်ပြီး အဲဒီလို copy ကူးလို့ရပါတယ်။

ကျွန်တော်တို့ Android အတွက် သိထားသင့်တဲ့ Data Classes အပိုင်းကတော့ ဒီလောက်ပါပဲ။

ဆက်ပါဦးမယ်