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

Practice Project: Task Manager - Part 1

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

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

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

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

ဒီ project မှာ terminal ပေါ်မှာ run နိုင်တဲ့ simple Task Manager တစ်ခုကို 3 part ခွဲပြီးတည်ဆောက်သွားမှာပါ။ Part 1 မှာ Task ဆိုတဲ့ data class ကိုဖန်တီးပြီး priority level တွေကို enum class နဲ့ သတ်မှတ်ပါမယ်။ Data class ကို သုံးတာက task တစ်ခုချင်းစီရဲ့ id , title , priority , isDone ဆိုတဲ့ property တွေကို structured data အနေနဲ့ သိမ်းဖို့အတွက်ပါ။ MutableList ကို သုံးပြီး task list ကို memory ထဲမှာ ထိန်းသိမ်းပြီး add function တစ်ခုနဲ့ task အသစ်ထည့်နိုင်အောင်လုပ်ပါမယ်။ Kotlin ရဲ့ null safety feature ကို task title validate လုပ်တဲ့နေရာမှာ ချက်ချင်းသုံးထားပါတယ်။

လက်တွေ့ ဆောက်ကြည့်မယ်

Task.kt ဆိုတဲ့ file အစား main.kt တစ်ခုတည်းထဲမှာ Priority enum class (LOW, MEDIUM, HIGH) တစ်ခုရေးပါ။ ပြီးရင် Task data class ကို id: Int , title: String , priority: Priority , isDone: Boolean = false field တွေနဲ့ ဖန်တီးပါ။ TaskManager class တစ်ခုထဲမှာ private mutableListOf<Task>() ကို property အနေနဲ့ ထားပြီး addTask(title: String, priority: Priority) function ရေးပါ - title က blank ဖြစ်နေရင် println နဲ့ error message ပြပြီး task မထည့်ဘဲ return လုပ်ပါ။ Task id တွေကို list.size + 1 နဲ့ auto-generate လုပ်ပါ။ နောက်ဆုံးမှာ main() function ထဲက TaskManager instance ဖန်တီးပြီး task 3 ခုလောက် add လုပ်ကြည့်ပါ။

Code နမူနာ

kotlin
enum class Priority { LOW, MEDIUM, HIGH }

data class Task(
    val id: Int,
    val title: String,
    val priority: Priority,
    var isDone: Boolean = false
)

class TaskManager {
    private val tasks = mutableListOf<Task>()

    fun addTask(title: String, priority: Priority) {
        if (title.isBlank()) {
            println("Task title empty ဖြစ်လို့ add လုပ်လို့မရပါ")
            return
        }
        val newTask = Task(id = tasks.size + 1, title = title, priority = priority)
        tasks.add(newTask)
        println("Task added: ${newTask.title} [${newTask.priority}]")
    }

    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("", Priority.LOW)
    manager.printAll()
}
You should see
Task နှစ်ခု successfully add ဖြစ်ပြီး၊ empty title ပေးလိုက်တဲ့ task ကတော့ error message ပြီး skip ဖြစ်သွားပါမယ်။

၅ မိနစ် စမ်းကြည့်

Priority enum ထဲကို URGENT ဆိုတဲ့ value တစ်ခုထပ်ထည့်ပြီး၊ addTask လုပ်တုန်း priority မပါရင် default value MEDIUM ကို automatically သုံးအောင် function signature ကို ပြင်ကြည့်ပါ။

သတိလေးတစ်ချက်

Data class တွေမှာ id ကဲ့သို့ auto-increment logic ကို list.size + 1 နဲ့ လုပ်တာက task ကို delete လုပ်ပြီးမှ ထပ်ထည့်ရင် id ထပ်တာမျိုး ဖြစ်နိုင်လို့ production app မှာတော့ UUID ဒါမှမဟုတ် database sequence သုံးသင့်ပါတယ်။

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

  • Data class ရဲ့ property တွေကို val အစား var ထားပြီး id ကို run time မှာ ပြောင်းလို့ရနေအောင် ထားမိတတ်ပါတယ် - id လို ပြောင်းလို့မဖြစ်သင့်တဲ့ field ကို val ထားသင့်ပါတယ်
  • isBlank() ကို isEmpty() နဲ့ မှားသုံးတတ်ကြပါတယ် - space တွေပဲ ပါနေတဲ့ title ကို isEmpty() က catch မလုပ်နိုင်ပါ

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

Priority enum ထဲကို URGENT ဆိုတဲ့ value တစ်ခုထပ်ထည့်ပြီး၊ addTask လုပ်တုန်း priority မပါရင် default value MEDIUM ကို automatically သုံးအောင် function signature ကို ပြင်ကြည့်ပါ။

You'll know it worked when: Task နှစ်ခု successfully add ဖြစ်ပြီး၊ empty title ပေးလိုက်တဲ့ task ကတော့ error message ပြီး skip ဖြစ်သွားပါမယ်။

Practice Project: Task Manager - Part 1 | Thuta Learning