ခဏလေး ဒီလိုပဲ စဉ်းစားကြည့်
Part 1 မှာ task list ကို ဖန်တီးပြီး add လုပ်တာအထိ ရောက်ခဲ့ပါပြီ။ ဒီ part မှာတော့ Kotlin ရဲ့ collection function တွေဖြစ်တဲ့ filter , find , forEach နဲ့ lambda expression တွေကို သုံးပြီး task list ကို search / filter / status update လုပ်တဲ့ feature တွေ ထည့်သွားပါမယ်။ Higher-order function ဆိုတာ function ကို parameter အနေနဲ့ လက်ခံနိုင်တဲ့ function ဖြစ်လို့ , custom filter logic ကို caller ဆီကနေ lambda အနေနဲ့ pass လုပ်ခိုင်းနိုင်ပါတယ်။ When expression ကို task status ပြောင်းတဲ့နေရာမှာ readable ဖြစ်အောင် သုံးပါမယ်။ Null safety ကို task မတွေ့ရင် error မတက်စေဘဲ handle လုပ်ဖို့ safe call operator တွေနဲ့ ပေါင်းသုံးပါမယ်။
လက်တွေ့ ဆောက်ကြည့်မယ်
TaskManager class ထဲကို function 3 ခု ထပ်ထည့်ပါ - completeTask(id: Int) က tasks.find { it.id == id } နဲ့ task ကိုရှာပြီး isDone = true ပြောင်းပါ၊ task မတွေ့ရင် "Task not found" ပြပါ။ filterByPriority(priority: Priority) က filter lambda သုံးပြီး priority အလိုက် task list ပြန်ပေးပါ။ searchTasks(predicate: (Task) -> Boolean) ဆိုတဲ့ higher-order function တစ်ခုရေးပြီး caller ကနေ custom condition (ဥပမာ - title contains keyword) ကို lambda အနေနဲ့ ပေးနိုင်အောင်လုပ်ပါ။ main() ထဲမှာ task complete လုပ်ကြည့်ပြီး HIGH priority task တွေချည်း filter လုပ်ကြည့်ပါ၊ ပြီးရင် searchTasks ကို title.contains("Kotlin") ဆိုတဲ့ lambda နဲ့ခေါ်ကြည့်ပါ။
Code နမူနာ
class TaskManager {
private val tasks = mutableListOf<Task>()
fun addTask(title: String, priority: Priority) {
if (title.isBlank()) return
tasks.add(Task(id = tasks.size + 1, title = title, priority = priority))
}
fun completeTask(id: Int) {
val task = tasks.find { it.id == id }
if (task != null) {
task.isDone = true
println("Task #${task.id} completed: ${task.title}")
} else {
println("Task not found: #$id")
}
}
fun filterByPriority(priority: Priority): List<Task> =
tasks.filter { it.priority == priority }
fun searchTasks(predicate: (Task) -> Boolean): List<Task> =
tasks.filter(predicate)
fun printAll() = tasks.forEach { println("#${it.id} - ${it.title} (${it.priority}) done=${it.isDone}") }
}
fun main() {
val manager = TaskManager()
manager.addTask("Kotlin syntax ပြန်ကြည့်ရန်", Priority.HIGH)
manager.addTask("Data class ကျင့်ရန်", Priority.MEDIUM)
manager.addTask("Lambda ကျင့်ရန်", Priority.HIGH)
manager.completeTask(1)
println("--- HIGH priority tasks ---")
manager.filterByPriority(Priority.HIGH).forEach { println(it.title) }
println("--- Search 'Kotlin' ---")
manager.searchTasks { it.title.contains("Kotlin") }.forEach { println(it.title) }
}Task #1 ကို complete လုပ်ပြီးကြောင်း message ပေါ်လာမယ်၊ HIGH priority task နှစ်ခုနဲ့ 'Kotlin' ပါတဲ့ task တစ်ခု list ပေါ်လာပါမယ်။၅ မိနစ် စမ်းကြည့်
pendingTasks() ဆိုတဲ့ function အသစ်တစ်ခု ထပ်ရေးပြီး isDone == false ဖြစ်တဲ့ task တွေချည်း filter { } lambda နဲ့ ပြန်ပေးအောင် ကျင့်ကြည့်ပါ။
သတိလေးတစ်ချက်
Higher-order function ကို design လုပ်တဲ့အခါ predicate function ရဲ့ parameter type ကို အတိအကျ သတ်မှတ်ထားရင် caller ဘက်က lambda parameter type ကို Kotlin က type inference နဲ့ auto detect လုပ်ပေးမှာမို့ code ပိုတိုပါလိမ့်မယ်။