Cracking Of Kotlin Interview Question Part 2

Lin Maung
2 min readNov 29, 2021

--

အရင်တစ်ပတ်က part 1ပြီးသွားပြီဆိုတော့ နောက်တစ်ပိုင်းဆက်ကူးကြတာပေါ့။

7. Explain about lateinit var and lazy.

lateinit var တွေသည် mutable variables တွေဖြစ်တယ်။စစချင်းမှာ assign မလုပ်ဘဲထားလို့ရတယ်။တစ်နေရာရာရောက်မှ assign လုပ်လို့ရတယ်။
တကယ်လို့ မလုပ်ဖြစ်ဘဲဒီတိုင်းထားမိသွားရင်တော့ Exception တက်ပါလိမ့်မယ်။ဒီကောင်က Thread Safe မဟုတ်ပါဘူး။

private lateinit var adapter:RecyclerViewAdapter//If adapter is not initialized, UninitializedPropertyAccessException will be thrown.

lazy ကျတော့ တစ်ခါ assign လုပ်ပြီးသွားရင် ပြန်ပြင်လို့မရတော့ဘူး။ ဒါပေမဲ့ တစ်ခုမှတ်စရာရှိတာကသူ့ကိုမခေါ်မချင်း initialize မလုပ်ဘူး။ဒီကောင်ကတော့ Thread Safe ဖြစ်ပါတယ်။

private val apiService:ApiService by lazy{
ApiSerivice.create()
}

8. What is Kotlin Coroutines?

Coroutine က Threadပေါ်မှာ ခဏ‌ရွေ့ထားလို့ရတဲ့ အပိုင်းအစ(Function)တစ်ခုလေးလို့ပြောလို့ရမယ်။ သူက asynchronous ပြိုင်တူအလုပ်လုပ်လို့ရတယ်ပေါ့။ Coroutines ကို Light-weight Thread လို့လည်းမြင်လို့ရနိုင်တယ်။ဒါပေမဲ့ REAL Threadနဲ့တော့သုံးတဲ့ပုံတော်တော်ကွာတယ်။ ဒီမှာအသုံးပြုတဲ့ Dispatchers တွေကတော့

  • Default
  • IO(Resource intensive ဖြစ်တဲ့ network ခေါ်တာ Db Queries ဆွဲတာ Image Processing လုပ်တာစတာတွေမှာ သုံးမယ်ဆို ဒီဟာကိုသုံးရမယ်)
  • Main(UI Thread မှာ အလုပ်လုပ်တယ်)
  • Unconfined(Main Thread ထဲမှာအလုပ်လုပ်တာများတယ်)

9. Explain About open and public.

open က“open for extension“ ပေါ့။ SOLID Principle ထဲက “O”ကိုကိုယ်စားပြုထားပါတယ်။
ဒီလိုပုံစံမျိုးရေးရပါတယ်။

Classထဲမှာ Override လုပ်ချင်တဲ့ function တွေကို ‘open’ထည့်ပေးရပါတယ်။ဒီလိုမျိုးပေါ့။

open class Base{
}

မထည့်ပေးပဲ Override လုပ်မယ်ဆိုရင်တော့ ‘functionName’ in ‘className’ is final and cannot be overridden.
ဆိုပြီးပြပါလိမ့်မယ်။

open class Base{ 
open fun b()
fun c()
}
class Main:Base(){
override fun b(){} //This is Absolutely OK
override fun c(){} //'c' in 'Base' is final and cannot be overriden.
}
fun main(){
Main().b()
Main().c()
}

Public ကိုတော့ အရင်အပတ်မှာပြောထားဖူးပါတယ်။ဒီကောင်က visibility modifier တစ်ခုပါ။class, method,variable တွေရဲ့ ရှေ့မှာထည့်သုံးရ ပါတယ်။ ဘာမှမပြောထားရင် default က publicပါ။Projectမှာကြိုက်တဲ့နေရာကခေါ်သုံးလို့ရပါတယ်။

10. Explain About const and val.

  • const => compile-time constant.
  • val => run-time constant.

const val ကို String သို့မဟုတ် Primitives နဲ့ပဲသုံးတယ်။ Performance အနေနဲ့ဆိုရင်တော့ const val သုံးခြင်းက ပိုကောင်းတယ်။ ဘာလို့လဲဆိုတော့ Compile time မှာ မလို့။

11. Explain about Ternary Operator And Why doesn’t it exist in Kotlin.

Ternary Operator ဆိုရင် အတိုကောက်မှတ်ထားမိတာက ဟိုဟာမဟုတ်ရင် ဒီဟာပေါ့။

ကျွန်တော်ကတော့ ဒီလိုပဲမှတ်ထားတယ်ပေါ့။ ဥပမာပေးရမယ်ဆိုရင်

condition ? value if true: value if false

Kotlin မှာတော့ Ternary Operator မရှိပါဘူး။ ဘာကြောင့်လဲဆိုတော့ သူ့ရဲ့ if else သည် expression အနေနဲ့သုံးတာဖြစ်တဲ့အတွက် Ternary Operator မလိုဘူးလို့ ပြောထားပါတယ်။

Ternary Operator အစား ရိုးရိုး if else ပဲသုံးရင်လုံလောက်ပါတယ်။

if(condition) valueIfTrue else valueIfFalse

12. Explain about Elvis Operator.

ဒီဟာ(?:) လေးကိုမြင်တာနဲ့ Elvis Operator လို့သိထားရမယ်။ ဒါကိုဘယ်လိုသုံးမလဲဆိုတော့

var myStr:String?=null
val length=if(myStr!=null) myStr.length else -1

အခုဒီမှာဆို length က -1 ပဲထွက်လာမှာပါ။ ဟုတ်တယ်ဟုတ်။

အဲဒါကို အခု elvis operator သုံးပြီးပြန်ရေးပြပါမယ်။

val length=myStr?.length ?: -1

Elvis Operator သည် သူ့ရှေ့က ကောင်က null ဖြစ်မဖြစ်စစ်တယ်။ Null မဟုတ်ဘူးဆိုရင်ရှေ့ကကောင်ရဲ့တန်ဖိုးကိုယူတယ်။ Null ဆိုရင်တော့ ‌နောက်ကကောင်ရဲ့တန်ဖိုးကို ယူတယ်။

--

--