You are on page 1of 13

1 Bridge to Kotlin (Myanmar Links)

Bridge to Kotlin
Kotlin Language ဆိတာ High Level Programming Language ထဲမာ ေနာက်ဆးေပ
ံ Programming

Language ဆိရင် မမားပါဘး။ ေနာက်မေပါက်တဲ့ ေရ ကာပင်ဆိတဲ့ အတိင်း တစ်ြခား Language ေတွက

အေကာင်းဆံးေတွပဲ ေပါင်းထည့်ထားပါတယ်။ က န်ေတာ်ကေတာ့ ဒီေနရာမာ Android Developer

ေတွအေနနဲ ့သိသငတ
့် ဲ့ Kotlin Language ဆိင်ရာ Feature ေတွကပဲ
ိ ေရွ းထတ် ပီး ေြပာသွားမာ

ြဖစ်ပါတယ်။ Programming Language ေတွ ေလ့လာေတာမ


့ ယ်ဆတိ
ိ င်း ပထမဦးဆံး ကည့ရ
် မာ Variable

ေတွ ြဖစ်ပါတယ်။

Variables in Kotlin
Programming Language ေတွက Support ေပးတဲ့ Variable ေတွကိ ေလ့လာမယ်ဆရင်

1. Stastically Typed (or) Dynamically Typed


2. Primative Data Type (or) Object Data Type
3. Mutable (or) Immutable

Kotlin ဟာ Stastically Typed Language ြဖစ်ပါတယ်။ Variable Type ေတွကိ ေ ကြငာေပးဖိ ့

လိအပ်ပါတယ်။ ဒါေပမယ့် ေနာက်က Assign လပ်မယ့် Value က Type ေသချာတယ်ဆရင်


ိ Variable

Type ကိ ေ ကာ်ြငာေပးစရာ မလိပါဘး။

(ဒီေနရာမာ Dynamically Typed Language ဆိတာ က န်ေတာ်တိ Coder


့ ေတွအေနန ့
Variable Type ကိ ေ ကာ်ြငာေပးစရာမလိပါဘး။ ေနာက်က Assign လပ် လာမယ့် value

အေပ မတည် ပီး အလိအေလ ာက် Type ကိ သတ်မတ်ေပးသွားတာပါ။ Scripting


Language ေတွမာ အေတွရများပါတယ်)

နမနာအေနနဲ ့ေလ့လာ ကည့်ရေအာင်

val oneMillion = 1_000_000


val creditCardNumber = 1234_5678_9012_3456L
val socialSecurityNumber = 999_99_9999L
val hexBytes = 0xFF_EC_DE_5E
val bytes = 0b11010010_01101001_10010100_10010010

Page 1 of 15
2 Bridge to Kotlin (Myanmar Links)

Kotlin မာ ထးြခားတာ တစ်ခက Variable ေတွ အေနနဲ ့Java လိ Primative Data Type ပံစံ

အလပ်မလပ်ပဲ Object Data Type ပံစံ အလပ်လပ်ပါ။ အဲဒအ


ီ တွက် Integet ကေန String ေြပာင်းချင်ရင်

အရင်က Java မာ ေရးသလိ String.valueOf(<int value>) ဆိတာမျိ း ေရးစရာမလိေတာပ


့ ဲ ေအာက်မာ
့ တိင်း ေရးလိရပါတယ်
ြပထားတဲအ ့ ။

oneMillion.toString()
oneMillion.toByte()
oneMillion.toBigDecimal()
oneMillion.toBigInteger()

ဒါေပမယ့် Android မာေတာ့ ေရးရင် Object ပံစံန ဲ ေရးရ


့ ပီး တကယ်တန်း သံးရင်ေတာ့
Primative Data Type ပံစံ သံးပါတယ်။ Primative Data ပံစံဆိတာ Memory ေပ မာ

ေနရာ အေသမတ်တပ
ဲ့ ံစံပါ။ ဒါကလဲ Java နဲ Interoperability
့ အတွက်ပါ။ ဆိလိတာက
Kotlin နဲ ေရးရး
့ Java နဲ ေရးရး
့ Android ကိ အဆင်ေြပေစဖိ ပါ။

Kotlin မာ တစ် ကိမ် Assign လပ်တာနဲ ြပင် ့ ဲ့ ြပင်လိမရေတာ


့ စရာမလိေတာတ ့ တ
့ ဲ့ Variable ဆိရင်

့ ) သတ်မတ်လိရပါတယ်
Inmutable (ြပင်လိ မရေအာင် ့ ။ ေနာက်ထပ် value ကိ ြပင်ချင်တယ်ဆရင်
ိ ေတာ့

Mutable (ြပင်လရေအာင်
ိ့ ) သတ်မတ်ေပးလိရပါတယ်
့ ။ ဥပမာ -

val name = "Aung Aung"


var age = 34

name = "Change It"


age = 45

val ဆိတာက Immutable ပါ။ အဲဒအ


ီ တွက် name = “Change It’ လိ ထပ်
့ Assign လပ်ရင် Error

တက်ပါလိမ်မ
့ ယ်။ IDE မာ တင် Error တက်လာမာပါ။ var လိ ေပးထားတာေတာ
့ ့ Mutable ပါ။
ီ တွက် age = 45 ဆိ ပီး ထပ် assign လပ်လရပါတယ်
အဲဒအ ိ့ ။

Page 2 of 15
3 Bridge to Kotlin (Myanmar Links)

Java မာလိ Variable ေတွကိ အရင်ေ ကာ်ြငာ ပီး ေနာက်မ တန်ဖိး assign လပ်ချင်တယ်ဆရင်
ိ ေတာ့ ဒီလိ

ပံစံန ဲ လပ်
့ လရပါတယ်
ိ့ ။

lateinit var test: String

အဲဒလ
ီ ိ သတ်မတ်လိက်ရင်ေတာ ့ test ရဲ value
့ ကိ ေနာက်မ သတ်မတ်လရသွ
ိ ့ ားပါလိမ်မ
့ ယ်။

ကျန်တာေတွကေတာ့ တစ်ြခား Language ေတွန ဲ ့အတတပါပဲ။ Android အတွက် Bridge အေနနဲ ့

သိစရာကေတာ့ Variable နဲ ပတ်


့ သက်ရင် ဒီေလာက်ပါပဲ။

Array in Kotlin

Kotlin မာ Array နဲ ပတ်


့ သက်ရင် ထးြခားတာေတွ ိပါတယ်။ ထးြခားတယ်ဆတာ
ိ က န်ေတာ်တိ တစ်
့ ြခား

Programming Language ေတွမာ အသံးြပ တဲ့ ပံစံေတွန ဲ ့မတတာပါ။ Kotlin Array ကိ List ေတွန ဲ ့တွဲ ပီး
နားလည်ဖိ လိ
့ ပါတယ်။ က န်ေတာ်တိ Android
့ မာ မြဖစ်မေန သံးဖိ လိ
့ အပ်တာ Kotlin က Array နဲ List

ေတွပါ။

Array တစ်ခ ေ ကာ်ြငာလိက်တာနဲ Getter


့ နဲ Setter
့ ေတွပါတဲ့ Array Class တစ်ခ ေ ကာ်ြငာလိက်ပါတယ်။

Array Class တစ်ခမာ

1. size – property တစ်ခ

2. get, set, iterator ဆိတဲ့ funcction သံးခ (3)

3. Inherited Functions ေတွ ြဖစ်တဲ့ equals, hashCode, toString ဆိတဲ့ function သံးခ

4. Extension Properties ေတွ ြဖစ်တဲ့ indices, lastindex

5. Extension Functions ေတွ အများ ကီး ပါဝင်ပါတယ်။

အဲဒ ီ အပိင်း (၄) ပိင်းမာ အေပ သံးချက်က ဘာမ မထးြခားပါဘး။ ေအာက်က နမနာေလးအတိင်း

ေရး ကည့မ
် ယ်ဆရင်
ိ နားလည်သာွ းပါလိမ်မ
့ ယ်။

val days = arrayOf("Sun","Mon", "Tue", "Wed", "Thu",


"Fri", "Sat")
val anotherDays = arrayOf("Sun","Mon", "Tue", "Wed",
"Thu", "Fri", "Sat")
println(days.size)
println(days[2])
for (day in days) {

Page 3 of 15
4 Bridge to Kotlin (Myanmar Links)

println(day)
}
if (days.equals(days)) {
println("They are equal")
} else {
println("They are not equal")
}

if(days.equals(anotherDays)) {
println("They are equal")
} else {
println("They are not equal")
}
println(days.indices)
println(days.lastIndex)

အဲဒ ီ Program ထဲမာပါတဲ့ ပထမ if မာေတာ့ They are equal လိ ထွ


့ က် ပီး ေနာက် if မာေတာ့ They are
not equal လိ ထွ
့ ကပ
် ါလိမ်မ
့ ယ်။ .equals ဆိတာက object လိက် တိက်စစ်တာြဖစ် ပီး တန်ဖိးကိ စစ်တာ
မဟတ်တအ
ဲ့ တွက် ြဖစ်ပါတယ်။

Kotlin Array မာ ပါတဲ့ Extension Function ေတွက အရမ်း အသံးဝင်ပါတယ်။ အဲဒအ


ီ ထဲက တစ်ချိ ကိ

ေလ့လာ ကည့ရ
် ေအာင်

.all
Kotlin Array ရဲ ့ Extension Function တစ်ခြဖစ်တဲ့ all ဟာ Array ထဲမာ ိတဲ့ Element ေတွ အားလံးကိ

တစ် ပိ င်တည်း စစ်ချင်တဲ့အခါ အများ ကီး အသံးဝင်ပါတယ်။ ဥပမာ -

val numbers = arrayOf(2,4,6,8,10)


val isEven: (Int) ->Boolean = { it % 2 == 0}
val iterator = numbers.iterator()

while (iterator.hasNext()) {
if (isEven(iterator.next())) {
println(true)
}

Page 4 of 15
5 Bridge to Kotlin (Myanmar Links)

println(numbers.all(isEven)) // isEvent(it)
အေပ မာ ြပထားတဲ့ Program ကိ ေလ့လာ ကည့မ
် ယ်ဆရင်
ိ numbers array ထဲမာ ပါတဲ့ values ေတွ

အားလံး စံဂ န်း (Even Number) ေတွလားဆိ ပီး စစ်ချင်တယ် ဆိပါစိ။့ ပံမန်အတိင်းဆိရင် loop ပတ် ပီး

စစ်ေနရပါလိမ်မ
့ ယ်။ အဲဒအ
ီ စား numbers.all(isEven) ဆိရင် တစ်ခါတည်း ကိစ ြပတ်ပါတယ်။

ဒီေနရာမာ တစ်ခမတ်ထားဖိ လိ
့ တာက အထဲမာ ိတဲ့ Value တစ်ခြခင်းစီကိ
ကိယ်စားြပ တဲအ
့ ခါ Kotlin မာ it နဲ ကိ
့ ယ်စားြပ ပါတယ်။ numbers.all(isEven(it))
ဆိ ပီးလဲ စစ်လိရပါတယ်
့ ။

.any
.any ကေတာ့ .all နဲ ့ဆင်ပါတယ်။ .all က အားလံး ြဖစ်မ true ြဖစ်မာ ြဖစ် ပီး .any ကေတာ့ တစ်ခခ

ကိက်တာနဲ true
့ ြဖစ်ပါမယ်။ ဥပ
့ မာ -

val numbers = arrayOf(1, 4, 5, 7, 10)


val isEven: (Int) -> Boolean = { it % 2 == 0}
println(numbers.any { isEven(it) })

အေပ မာ ြပထားတဲ့ Program ကိ run ကည့မ


် ယ်ဆိရင် Array Value ေတွထမ
ဲ ာ 4 ဆိတဲ့ even value

တစ်ခပါေနတဲ့အတွက် တစ်ခခ ကိက်တအ


ဲ့ တွက် true ဆိ ပီး ြပပါလိမ်မ
့ ယ်။

ဒီေနရာမာေတာ့ it ရဲ အသံ
့ းြပ တဲ့ ပံစံကိ င်းြပထားပါတယ်။

.contains
.contains ကလဲ အရမ်းအသံးဝင်တဲ့ function တစ်ခ ြဖစ်ပါတယ်။ ဥပမာ -

Page 5 of 15
6 Bridge to Kotlin (Myanmar Links)

val numbers = arrayOf(2, 4, 6, 8, 10)


println(numbers.contains(6))
ဲ ာ 6 ပါလားဆိ ပီး ာလိရပါတယ်
Array Value ေတွထမ ့ ။ ိတယ်ဆရင်
ိ true ဆိ ပီး ြပပါလိမ်မ
့ ယ်။

.copyOf
copyOf ကေတာ့ Array တစ်ခကေန ေနာက်တစ်ခကိ တစ်ပစံ
ံ တည်း ကးယချင်တအ
ဲ့ ခါ သံးပါတယ်။

val days = arrayOf("Sun", "Mon", "Tue", "Wed", "Thu",


"Fri", "Sat")
val anotherDays = days.copyOf()
for (anotherDay in anotherDays) {
println(anotherDay)
}
if (days.equals(anotherDays)) {
println("They are exactly the same")
} else {
println("They are not exactly the same")
}

anotherDays က days ရဲ တစ်


့ ပံစံတည်း Copy အြဖစ် ကးလိက်ပါတယ်။ ဒါေပမယ့် သတိ ့ စ်ခကိ equals

နဲ ့စစ် ကည့်မယ်ဆရင်
ိ ေတာ့ တမာ မဟတ်ပါဘး။ Object စ်ခ ြဖစ်သာွ း ပီး တစ်ခနဲ ့တစ်ခ Memory ေပ မာ

မတ်တအ
ဲ့ ခါ မတတဲအ
့ တွက် ြဖစ်ပါတယ်။

.filter
Kotlin Array မာ filter ကလဲ အေတာ် အသံးဝင်တဲ့ function တစ်ခ ြဖစ်ပါတယ်။ ဥပမာ -

val numbers = arrayOf(1, 3, 4, 5, 6, 7, 8, 9, 10)


val isEven: (Int) -> Boolean = { it % 2 == 0 }
val filteredNumbers = numbers.filter(isEven)
println(filteredNumbers)
if(filteredNumbers is List) {
println("It is a List!")
Page 6 of 15
7 Bridge to Kotlin (Myanmar Links)

}
if (numbers is Array<*>) {
println("It is an Array!")
}

အေပ က Program ကိ ေလ့လာ ကည့မ


် ယ်ဆရင်
ိ filteredNumbers ေတွ အကန်လံးဟာ

numbers.filter(isEven) နဲ စစ်
့ လက်
ိ တအ
ဲ့ တွက် List တစ်ခအေနနဲ ့ထွက်လာပါလိမမ
့် ယ်။

ဒီေနရာမာ Array အေနနဲ ထတ်


့ ေပးတာ မဟတ်ပဲ List အေနနဲ ထတ်
့ ေပးတယ်ဆိတာ
သတိထားဖိ လိ
့ ပါတယ်။ List အေ ကာင်းကိ ေနာက်ပိင်းမာ ဆက်ေြပာပါမယ်။

.forEach
forEach ကလဲ က န်ေတာ်တိအတွ
့ က် အင်မတန် အသံးဝင်တဲ့ function တစ်ခ ြဖစ်ပါတယ်။ ဥပမာ -

val numbers = arrayOf(1, 3, 4, 5, 6, 7, 8, 9, 10)


numbers.forEach {
println(it)
}

forEach သံးမယ်ဆရင်
ိ က န်ေတာ် တိ အေပ
့ မာ ေရးသလိ ေရးေနစရာ မလိေတာပ
့ ါဘး။ ေရးရတာ
အရမ်းသက်သာသွားပါတယ်။

ဒီေနရာမာ သတိထားဖိ လိ
့ တာက it ဆိတာပါ။ it ဆိတာ item တစ်ခြခင်းစီကိ
ကိယ်စားြပ ပါတယ်။

Kotlin Array ရဲ Extension


့ Function ေတွ အများ ကီးပါ။ ေအာက်မာ ေပးထားတဲ့ Link က တစ်ဆင့်

သွား ကည့်လိရပါတယ်
့ ။

 https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-array/index.html

Page 7 of 15
8 Bridge to Kotlin (Myanmar Links)

Array Extension Function ေတွကိ ဘယ်လိ ေလ့လာမလဲဆရင်


ိ ကိယ်တကယ် အသံးလိတဲ့ Tradition

Way အတိင်း Loop ပတ်ဖိ စ


့ းစားေန ပီဆရင်
ိ Kotlin ဟာ ေနာက်ဆးေပ
ံ Programming Language

ီ တွက် ကိယ် သမာ ိးကျသံးေနတာေတွအတွက် သမာ


တစ်ခ ြဖစ်တယ်။ အဲဒအ ့ အေထာက်အပံေ
့ တွ
ိ င်
ိ တယ်လိ ြမင်
့ ပီ း API Reference မာ ာ ကည့်ဖိ လိ
့ ပါတယ်။

Collections in Kotlin (List, Set, Map)

Kotlin မာ collections များအေနနဲ ့List, Set, Map ဆိ ပီ း သံးမျိ း ေထာက်ပပ


ံ့ ါတယ်။ Java နဲ အတတပါပဲ
့ ။

ဒါေပမယ့် မတတာေလးေတွ ိပါတယ်။ အဲဒါေတာ့ Mutable Collections နဲ ့Immutable Collections ပါ။

ဒီေနရာမာ Array နဲ Collection


့ ဘာကွာလဲဆတာ
ိ သိထားဖိ လိ
့ ပါတယ်။

Array ေတွက Fixed Size ြဖစ် ပီး Collections မာ ပါဝင်တဲ့ MutableList<T> ကေတာ့

Dynamic Size ြဖစ်ပါတယ်။

Array ေတွက Mutable ြဖစ် ပီး Collections မာေတာ့ Mutable ြဖစ်ချင်တယ်ဆရင်



MutableList ကိ သံးမ ရပါမယ်။

Collections ေတွဟာ အထဲမာ ပါဝင်တဲ့ Element ေတွကိ ကိင်တွယ်တေ


ဲ့ နရာမာ Array
ထက် ပိ ပီး လွယ်ကပါတယ်။

List
Kotlin List မာ MutableList နဲ ImmutableList
့ ဆိ ပီး ိပါတယ်။ ဥပ
့ မာ -

val days = listOf( "Sun", "Mon", "Tue", "Wed", "Thu",


"Fri" )
days.forEach { println(it) }
val anotherDays = mutableListOf( "Sun", "Mon")
val endDays = listOf("Wed", "Thu", "Fri")
anotherDays.add(2, "Tue")
println(anotherDays)

Page 8 of 15
9 Bridge to Kotlin (Myanmar Links)

anotherDays.addAll(endDays)
println(anotherDays)

listOf မာေတာ့ Array နဲ သိ


့ ပ်မထးေပမယ့် mutableListOf မာေတာ့ add တိ addAll
့ စတာေတွ

သံးလိရပါတယ်
့ ။ က န်ေတာ်တိ Java
့ မာ သံးေန က ပံစံေတွ ြဖစ်ပါတယ်။

Set
Set မာလဲ ထံးစံအတိင်း Immutable နဲ Mutable
့ ဆိ ပီ း စ်ခ ကွဲပါတယ်။ List နဲ ့Set ဘာကွာလဲဆရင်
ိ Set

မာက ထပ်ေနတဲ့ Element ေတွ ပါလိ မရပါဘး။


့ List မာေတာ့ ပါလိရပါတယ်
့ ။ ဥပမာ -

val firstList = listOf(1,1,3,5,4,3,2)


val firstSet = setOf(1,1,3,4,3,1)
println(firstList)
println(firstSet)

ပထမ listOf ကိ သံးေတာ့ ထပ်ေနတာေတွကိ ထပ်တအ


ဲ့ တိင်း ထားပါတယ်။ ဒတိယ setOf မာေတာ့

အဲဒလ
ီ ိမဟတ်ေတာပ
့ ဲ ထပ်ေနတာေတွကိ ဘံချ ပီး ေပါင်းလိက်ပါတယ်။ Run ကည့မ
် ယ်ဆိရင် Result မာ

[1, 1, 3, 5, 4, 3, 2]

[1, 3, 4]

ဆိ ပီ း ြပပါလိမ်မ
့ ယ်။

Map
Map ကေတာ့ Key->Value Pair ပံစံန ဲ သွ
့ ားပါတယ်။ Key ေတွ အေနနဲ ့ဘယ်ေတာ့မ မထပ်ပဲ Value
အေနနဲေတာ
့ ့ တလိရပါတယ်
့ ။ ဥပမာ -

val mapValues = hashMapOf("Sun" to 1, "Mon" to 2,


"Mon" to 3)
mapValues.forEach {
println(it.key)
Page 9 of 15
10 Bridge to Kotlin (Myanmar Links)

println(it.value)
}

အေပ က နမနာကိ ကည့မ


် ယ်ဆိရင် Map ကိ နားလည်မယ် ထင်ပါတယ်။

Page 10 of 15
11 Bridge to Kotlin (Myanmar Links)

Control Flow in Kotlin


Control Flow နဲ ့ပတ်သက်ရင်ေတာ့ ထးြခားတာေတွပဲ ေြပာသွားပါမယ်။ ကျန်တာေတွက တစ်ြခား

Programming Langauge ေတွန ဲ ့အတတပါပဲ။

If Statement

မာ ထးြခားတာေတွကေတာ့

val numOne = 45
val numTwo = 34
val max = if (numOne > numTwo) numOne else numTwo
println(max)

val anotherMax = if(numOne > numTwo) {


print("A is Max")
numOne
} else {
print("B is Max")
numTwo
}

println(anotherMax)

Java မာ Expression ေရးတဲ့ ပံစံ မတေတာပ


့ ါဘး။ အဲဒါ နည်းနည်း ထးြခားပါတယ်။

When Statement

Kotlin မာ When က နည်းမျိ းစံ သံးတယ်လိ ဆိ


့ င်
ိ ပါတယ်။ က န်ေတာ်တိ ပံ
့ မန် ေရးေန က Switch
Statement ပံစံသးတယ်
ံ ဆေပမယ့
ိ ် Switch လိ filter တစ်ခတည်း သံးတာမျိ း မဟတ်ပဲ Kotlin When မာ

နည်းမျိ းစံ ေရးလိရေနပါတယ်


့ ။ ဥပမာ -

class Test {
fun test() {
val x = 1

Page 11 of 15
12 Bridge to Kotlin (Myanmar Links)

when(x) {
1 -> println("One")
2 -> println("Two")
else -> {
println("Others")
}
}

val y = 4
when (y) {
in 1..5 -> println("It's in the range of
1 to 5")
!in 7..9 -> println("It's not in the
range of 7 to 9")
6 -> println("Six")
else -> {
println("Others")
}
}

when {
x.isOdd() -> println("X is Odd")
x.isEven() -> println("X is Even")
}
}
}

private fun Int.isEven(): Boolean {


if(this % 2 != 0) {
return true
}
return false
}

private fun Int.isOdd(): Boolean {


if( this % 2 == 0) {
return true
}

Page 12 of 15
13 Bridge to Kotlin (Myanmar Links)

return false
}

While နဲ ့ပတ်သက် ပီး သံးလိရတာ


့ အကန်လံးနီးပါး နမနာထဲမာ ပါပါတယ်။

 in and !in ဆိတာ သံးလိရပါတယ်



 ကိယ်တိင် သတ်မတ်ထားတဲ့ Extension Function ေတွလဲ သံးလိရပါတယ်

For Loop

For loop မာေတာ့ အရင်တန်းက ေရးေန ကပံစံကေန လံးဝ ကွဲထက


ွ ်သာွ းတယ်လိ ဆိ
့ င်
ိ ပါတယ်။

က န်ေတာ်တိ PHP
့ မာဆိရင် foreach နဲ ဆင်
့ တပါတယ်။ နမနာအေနနဲ ့ေရး ကည့ပ
် ါမယ်။

val myLists = listOf("Sun", "Mon", "Tue", "Wed",


"Thu", "Fri")
val myArray = arrayOf("Aung Aung", "Maung Maung",
"Kaung Kaung", "Hlaung Hlaung")
for (myList in myLists) {
println(myList)
}
for (i in myArray.indices) {
println(myArray[i])
}

အေပ က နမနာကိ စမ်း ကည့မ


် ယ်ဆရင်
ိ for loop နဲ ့ပတ်သက် ပီး ြပည့်ြပည့စ
် စံ
ံ နားလည်မယ် ထင်ပါတယ်။

While Loop နဲ ့Do While Loop ေတွကေတာ့ ပံစံအတတပါပဲ။ အဲဒအ


ီ ြပင် break တိ continue
့ တိလဲ

သံးလိရပါတယ်
့ ။

Page 13 of 15

You might also like