ခဏလေး ဒီလိုပဲ စဉ်းစားကြည့်
ဒီ lesson က Intermediate နဲ့ Advanced chapter မှာ လေ့လာခဲ့တဲ့ class , data class , inheritance , interface , higher-order function , collection processing (map/filter/sortedBy) concept တွေကို ပေါင်းစပ်ပြီး ပိုခက်တဲ့ task 3 ခုနဲ့ ကျင့်ခိုင်းထားတာပါ။ Exercise Set 1 ထက် difficulty ပိုမြင့်ပြီး class design , inheritance hierarchy , real-world data processing logic တွေ ပါဝင်ပါတယ်။ Task တစ်ခုချင်းစီကို ကိုယ်တိုင်ဖြေပြီးမှ code အောက်ကို reference solution အနေနဲ့ ကြည့်ဖို့ အကြံပြုပါတယ်။
လေ့ကျင့်ခန်းများ
Task 1: Animal abstract class တစ်ခုဖန်တီးပြီး abstract fun sound(): String ကို declare ပါ။ Dog နဲ့ Cat class နှစ်ခုကို Animal ကနေ inherit ခိုင်းပြီး sound() ကို override လုပ်ပါ - list<Animal> တစ်ခုထဲမှာ instance နှစ်ခုစလုံး ထည့်ပြီး loop ခါပြီး sound() ခေါ်ပါ။ Task 2: Product ဆိုတဲ့ data class (name: String, price: Double, category: String) ကို ဖန်တီးပြီး Product list တစ်ခု (5 items) manually ဖန်တီးပါ - ပြီးရင် filter နဲ့ price 1000 ကျော်တဲ့ product တွေကိုယူ, map နဲ့ name only list ထုတ်, sortedByDescending နဲ့ price အမြင့်ဆုံးကနေ စီပြပါ။ Task 3: higher-order function applyDiscount(products: List<Product>, discountFn: (Double) -> Double): List<Product> ကို ရေးပြီး caller ကနေ lambda (ဥပမာ { price -> price * 0.9 }) ပေးပြီး discount 10% လျှော့ထားတဲ့ product list အသစ် ပြန်ရအောင် implement လုပ်ပါ။
Code နမူနာ
abstract class Animal(val name: String) {
abstract fun sound(): String
}
class Dog(name: String) : Animal(name) {
override fun sound() = "Woof"
}
class Cat(name: String) : Animal(name) {
override fun sound() = "Meow"
}
data class Product(val name: String, val price: Double, val category: String)
fun applyDiscount(products: List<Product>, discountFn: (Double) -> Double): List<Product> =
products.map { it.copy(price = discountFn(it.price)) }
fun main() {
// Task 1
val animals: List<Animal> = listOf(Dog("Rex"), Cat("Mimi"))
animals.forEach { println("${it.name}: ${it.sound()}") }
// Task 2
val products = listOf(
Product("Laptop", 1500000.0, "Electronics"),
Product("Mouse", 25000.0, "Electronics"),
Product("Book", 8000.0, "Stationery"),
Product("Phone", 1200000.0, "Electronics"),
Product("Pen", 500.0, "Stationery")
)
val expensive = products.filter { it.price > 1000000 }
val names = expensive.map { it.name }
val sorted = products.sortedByDescending { it.price }
println("Expensive: $names")
println("Sorted: ${sorted.map { it.name }}")
// Task 3
val discounted = applyDiscount(products) { price -> price * 0.9 }
discounted.forEach { println("${it.name}: ${it.price}") }
}Dog/Cat ရဲ့ sound output, expensive product name list, price အလိုက်စီထားတဲ့ list, ပြီးတော့ 10% discount ပြီး price ချိုးထားတဲ့ product list တွေကို console မှာ တွေ့ရပါမယ်။၅ မိနစ် စမ်းကြည့်
Task 1 ထဲကို Bird class အသစ်တစ်ခု ထပ်ထည့်ပြီး sound() ကို override လုပ်ကြည့်ပါ - polymorphism ကြောင့် code အဓိက logic ဘာမှ ပြောင်းစရာမလိုဘဲ list ထဲထည့်ရုံနဲ့ အလုပ်လုပ်တာကို ၅ မိနစ်အတွင်း သက်သေပြပါ။
သတိလေးတစ်ချက်
Data class ရဲ့ property တွေကို val နဲ့ immutable ထားလေ့ရှိတဲ့အတွက် value ပြောင်းချင်ရင် copy() function ကို အမြဲသုံးသင့်ပြီး၊ map { } လိုမျိုး collection function တွေက original list ကို မပြောင်းဘဲ list အသစ်ပဲ ပြန်ပေးတယ်ဆိုတာ သတိရပါ။