Thuta Learning
ရှာဖွေရန်
ProjectsProgrammingbeginner

Practice Project: Task Manager - Part 2

စိတ်လျှော့ပါ။ ဒီခန်းကို စာအုပ်လိုမဟုတ်ဘဲ စကားပြောသလိုပဲ၊ နားလည်လွယ်အောင် ရှင်းပါမယ်။

ဒီခန်းပြီးရင် ဘာတတ်သွားမလဲ

  • Practice Project: Task Manager - Part 2 ကို လက်တွေ့ project ထဲမှာ အသုံးချတတ်မယ်
  • ကိုယ်တိုင် code ရေးပြီး run ကြည့်တတ်မယ်
  • Project တစ်ခုလုံးကို အဆင့်လိုက် ဆောက်တတ်မယ်

ခဏလေး ဒီလိုပဲ စဉ်းစားကြည့်

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 နမူနာ

kotlin
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) }
}
You should see
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 ပိုတိုပါလိမ့်မယ်။

ဒီနေရာမှာ လူအများမှားတတ်တယ်

  • find { } က result null ဖြစ်နိုင်တာကို မထည့်စဉ်းစားဘဲ task!!.isDone = true လို force unwrap သုံးမိတတ်ပြီး task မတွေ့ရင် crash ဖြစ်တတ်ပါတယ်
  • searchTasks(predicate: (Task) -> Boolean) ကို ခေါ်တဲ့နေရာမှာ () ထဲမှာ lambda ထည့်ပြီး searchTasks({ it.title.contains("x") }) ဆိုပြီး ရေးမိတတ်ပါတယ် - trailing lambda syntax သုံးရင် ပိုတိုပါတယ်

အခု ကိုယ်တိုင် စမ်းကြည့်

pendingTasks() ဆိုတဲ့ function အသစ်တစ်ခု ထပ်ရေးပြီး isDone == false ဖြစ်တဲ့ task တွေချည်း filter { } lambda နဲ့ ပြန်ပေးအောင် ကျင့်ကြည့်ပါ။

You'll know it worked when: Task #1 ကို complete လုပ်ပြီးကြောင်း message ပေါ်လာမယ်၊ HIGH priority task နှစ်ခုနဲ့ 'Kotlin' ပါတဲ့ task တစ်ခု list ပေါ်လာပါမယ်။

Practice Project: Task Manager - Part 2 | Thuta Learning