Kotlin

Bridge to Kotlin Part 3 (Null Safety)

အရင်အပိုင်းတွေကို ဖတ်ချင်တယ်ဆိုရင်တော့ အောက်မှ ပြထားတဲ့ လင့်တွေကတစ်ဆင့် ဖတ်နိုင်ပါတယ်။​​

Null Safety in Kotlin

Null Safety ကတော့ ကျွန်တော်တို့ Java နဲ့ ရေးနေကြ Developer တွေအတွက် စရေးတဲ့အခါ ကသိကအောင့် ဖြစ်စေတဲ့ နည်းလမ်း ဖြစ်ပါတယ်။ NullPointerException လို့ခေါ်တဲ့ Error မတက်အောင် Kotlin မှာ NullSafe ဖြစ်အောင် လုပ်ထားပါတယ်။

NullPointerException တွေက ပုံမှန်ဆိုရင် Runtime မှာကြမှ တက်လေ့ရှိတာပါ။ အဲဒီလို Error တက်တာကို ရှောင်ရှားနိုင်အောင် Kotlin က Null Safe ဖြစ်အောင် ရေးတဲ့ပုံစံကို ထည့်သွင်းလိုက်ပါတယ်။

တကယ်တော့ Runtime မှာ Error တက်အောင် မစောင့်တော့ပဲ Compile Time မှာတင် Error တက်အောင် လုပ်လိုက်တာပါ။

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

var firstString: String = "abcb"

var testString: String? = "How are you"

firstString = null

testString = null

firstString ကို null assign လုပ်လိုက်မယ်ဆိုရင် Non Null ဖြစ်တဲ့အတွက် Editor မှာတက် Error တက်လာပါတယ်။ ဒါပေမယ့် အဲဒါက ပြဿနာ မဟုတ်ပေမယ့် Runtime မှာ Value Change သွားလို့ Error တက်လာမယ်ဆိုရင် ပြဿနာပါ။ Kotlin မှာတော့ null ဖြစ်နိုင်ချေရှိတာတွေကို Program ကို တစ်ခါတည်း သုံးသပ်ပြီး Compile Time မှာကတည်းက Error တက်ပေးလိုက်ပါတယ်။

အကယ်၍ value က null ဖြစ်နိုင်ချေရှိတယ်ဆိုရင် ကျွန်တော်တို့ ကိုယ်တိုင် null ဖြစ်နိုင်ကြောင်း သတ်မှတ်ပေးလို့ ရပါတယ်။ အဲဒီလို သတ်မှတ်ပေးချင်တယ်ဆိုရင် variable type ရဲ့  နောက်မှာ ? လေး ထည့်ပေးရမှာ ဖြစ်ပါတယ်။ အဲဒီလို ထည့်လိုက်ပြီဆိုတာနဲ့ တစ်ခုတည်း မှတ်ထားဖို့ လိုတာက Value ကို ဖတ်မယ်ဆိုတာ null ဖြစ်မဖြစ် စစ်ရမယ်ဆိုတာပါပဲ။ Explicit Null Check လုပ်ပေးရပါမယ်။ ဥပမာ –

var testString: String? = "How are you"
testString = null
if (testString == null) {
    println("testString is null")
}
testString = "How do you do?"
if(testString == null) {
    println("testString is null")
} else {
    println("testString is not null")
}

အဲဒီလို Variable ကို သုံးမယ်ဆိုတိုင်း Null Check လုပ်ပေးရမယ်လို့ ဆိုလိုပါတယ်။ အဲဒီ အပြင် Null Safe Call ဆိုတာလဲရှိပါသေးတယ်။ ဥပမာ –

var greeting: String? = "Hello Kotlin"

greeting = null

val length = greeting.length

 အဲဒီလို ရေးမယ်ဆိုရင် Error ပြနေပါလိမ့်မယ်။ အထူးသဖြင့် greeting.length မှာပါ။ greeting ဆိုတဲ့ String ဟာ null value ဖြစ်နိုင်ပါတယ်။ အဲဒီအတွက် ပြန်ခေါ်သုံးတဲ့အခါမှာ null ကို စစ်ရင်စစ် ဒါမှမဟုတ် null safe ဖြစ်အောင် ခေါ်ဖို့ လိုပါတယ်။ ဒီလို ပြင်ရေးမှ ရပါမယ်။

var greeting: String? = "Hello Kotlin"
greeting = null
val length = greeting?.length
println(length)

အဲဒီနေရာမှာ ကျွန်တော်တို့အနေနဲ့ အကယ်၍ null ဖြစ်ခဲ့သည်ရှိသော် default value အနေနဲ့ ဘာထားရမလဲဆိုတာ သတ်မှတ်ထားလို့ရပါတယ်။ အဲဒါကို Elvis Operator လို့ ခေါ်ပါတယ်။ ?: နဲ့ ရေးပါတယ်။ နမူနာ ရေးကြည့်ရအောင်

var greeting: String? = "Hello Kotlin"

greeting = null


val length = greeting?.length ?: 0

println(length)

အဲဒီလို ရေးလိုက်မယ်ဆိုရင်တော့ length က null ဖြစ်နေတာကနေ 0 ဆိုပြီး ရိုက်ပြပါလိမ့်မယ်။

Not Null Assertion Operators

ကျွန်တော်တို့ ရေးတဲ့ Value တွေမှာ null မဖြစ်တာ သေချာတယ်ဆိုရင် not null assetion နဲ့ သတ်မှတ်လိုက်လို့ရပါတယ်။ !! နဲ့ ရေးရပါတယ်။ အဲဒီလို Not Null Assetion လုပ်ထားမယ်ဆိုရင် အကယ်၍ တန်ဖိုးဟာ null ဖြစ်ခဲ့မယ်ဆိုရင် compile time မှာ ကတည်းက Error တက်ပါလိမ့်မယ်။ ဥပမာ

var greeting: String? = "Hello Kotlin"

greeting = null

val length = greeting!!.length

အဲဒီ Program ကို Run ကြည့်မယ်ဆိုရင် Compile Time မှာ ကတည်းက Error တက်နေပါလိမ့်မယ်။ တကယ်တန်း Android ရေးတဲ့အခါမှာ ဒီ Null Safe နဲ့ ပတ်သက်ရင် သတိထားစရာတွေ ရှိပါသေးတယ်။

ဆက်ပါဦးမယ်