ခဏလေး ဒီလိုပဲ စဉ်းစားကြည့်
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 နမူနာ
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
endTerminal ထဲမှာ 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 အနေနဲ့ သုံးလို့ မရပါဘူး။