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

Task Tracker Project - Part 2

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

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

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

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

Part 1 မှာ ရေးထားတဲ့ Task နဲ့ TaskTracker class structure ကို base အနေနဲ့ ယူပြီး ဒီအဆင့်မှာ app ရဲ့ core feature တွေကို ထည့်သွင်းပါမယ်။ each_with_index iterator သုံးပြီး task list ကို index နံပါတ်နဲ့တကွ display လုပ်ပါမယ်၊ ternary operator (? :) သုံးပြီး done status ကို [x] ဒါမှမဟုတ် [ ] အနေနဲ့ ပြပါမယ်။ complete_task နဲ့ delete_task method နှစ်ခုမှာ if-else logic သုံးပြီး task ရှိမရှိ စစ်ဆေးကာ error case ကိုပါ handle လုပ်ပါမယ်။ ဒီအဆင့် ပြီးရင် app ဟာ task ကို ဖန်တီးရုံသက်သက်မကဘဲ track လုပ်နိုင်တဲ့ tool တစ်ခု ဖြစ်လာပါမယ်။

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

TaskTracker class ထဲမှာ list_tasks method တစ်ခု ထည့်ပါ - @tasks.each_with_index do |task, i| နဲ့ loop ပတ်ပြီး status = task.done ? "[x]" : "[ ]" ဆိုပြီး ternary သုံးကာ "#{i + 1}. #{status} #{task.title}" ကို puts လုပ်ပါ။ ပြီးရင် complete_task(index) method ကို ရေးပါ - @tasks[index - 1] ကနေ task ကို ယူပြီး task ရှိရင် task.done = true ထား၊ မရှိရင် "Task not found" ပြပါ။ delete_task(index) method မှာတော့ @tasks.delete_at(index - 1) သုံးပြီး task ကို array ကနေ ဖယ်ထုတ်ပါ၊ ရလဒ်အပေါ်မူတည်ပြီး message ကွဲပြားအောင် ပြပါ။ နောက်ဆုံး loop do...end block တစ်ခုနဲ့ user input ကို gets.chomp နဲ့ ယူပြီး "list", "add", "done", "delete", "exit" စတဲ့ command တွေအလိုက် case/when နဲ့ method တွေကို ချိတ်ဆက်ပါ။

Code နမူနာ

ruby
class TaskTracker
  # Part 1 ရဲ့ initialize, add_task, tasks ကို ဆက်သုံးပါမယ်

  def list_tasks
    @tasks.each_with_index do |task, i|
      status = task.done ? "[x]" : "[ ]"
      puts "#{i + 1}. #{status} #{task.title}"
    end
  end

  def complete_task(index)
    task = @tasks[index - 1]
    if task
      task.done = true
      puts "Completed: #{task.title}"
    else
      puts "Task not found"
    end
  end

  def delete_task(index)
    task = @tasks.delete_at(index - 1)
    task ? (puts "Deleted: #{task.title}") : (puts "Task not found")
  end
end

tracker = TaskTracker.new
loop do
  print "> "
  input = gets.chomp
  case input
  when "list"
    tracker.list_tasks
  when /^add /
    tracker.add_task(input.sub("add ", ""))
  when /^done /
    tracker.complete_task(input.sub("done ", "").to_i)
  when "exit"
    break
  end
end
You should see
Terminal ထဲမှာ list command နဲ့ task list ကို status နဲ့တကွ ကြည့်နိုင်ပြီး done/delete command တွေနဲ့ task state ကို ပြောင်းလဲနိုင်ပါမယ်။

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

delete command ကိုပါ case/when ထဲမှာ ထပ်ထည့်ပြီး "delete 2" လို input နဲ့ task ကို ဖျက်နိုင်အောင် 5 minutes အတွင်း ပြင်ဆင်ကြည့်ပါ။

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

user ရိုက်ထည့်တဲ့ index string ကို .to_i နဲ့ integer ပြောင်းဖို့ မမေ့ပါနဲ့ - မဟုတ်ရင် array index အနေနဲ့ သုံးလို့ မရပါဘူး။

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

  • index - 1 ကို လွတ်ပြီး array index (0-based) နဲ့ user-facing number (1-based) ကို ရောထားတတ်ကြပါတယ် - ဒါကြောင့် task မှားပြီး complete/delete ဖြစ်တတ်ပါတယ်
  • delete_at ရဲ့ return value ကို task not found ဖြစ်ချိန် nil ဖြစ်တာကို မသိဘဲ task.title ကို တိုက်ရိုက် ခေါ်မိပြီး NoMethodError တက်တတ်ပါတယ်

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

delete command ကိုပါ case/when ထဲမှာ ထပ်ထည့်ပြီး "delete 2" လို input နဲ့ task ကို ဖျက်နိုင်အောင် 5 minutes အတွင်း ပြင်ဆင်ကြည့်ပါ။

You'll know it worked when: Terminal ထဲမှာ list command နဲ့ task list ကို status နဲ့တကွ ကြည့်နိုင်ပြီး done/delete command တွေနဲ့ task state ကို ပြောင်းလဲနိုင်ပါမယ်။

Task Tracker Project - Part 2 | Thuta Learning