ခဏလေး ဒီလိုပဲ စဉ်းစားကြည့်
ဒီ project ရဲ့ ပထမအဆင့်မှာ Task ဆိုတဲ့ data တစ်ခုချင်းစီကို ကိုယ်စားပြုမယ့် Task class နဲ့ တစ်ခုလုံးကို စီမံခန့်ခွဲပေးမယ့် TaskTracker class ကို ဖန်တီးပါမယ်။ Task class မှာ title နဲ့ done ဆိုတဲ့ state ရှိပြီး, attr_accessor သုံးပြီး getter/setter တွေကို auto generate လုပ်ပါမယ်။ TaskTracker class ကတော့ Task object တွေကို array ထဲမှာ သိမ်းထားပြီး add_task method ကနေ task အသစ်တွေ ထည့်လို့ရအောင် ပြုလုပ်ပေးမှာပါ။ ဒီအဆင့်မှာ intro-level oop-intro, class-object, initialize, getters-setters, arrays concept တွေကို တွဲသုံးထားပါတယ်။ project ရဲ့ Part 2 မှာ ဒီ structure အပေါ်မှာ list/complete/delete feature တွေ ထပ်တိုးဆောက်သွားပါမယ်။
လက်တွေ့ ဆောက်ကြည့်မယ်
အရင်ဆုံး task_tracker.rb ဆိုတဲ့ file တစ်ခု create လုပ်ပါ။ Task class ကို attr_accessor :title, :done နဲ့ ရေးပြီး initialize(title) method ထဲမှာ @title ကို parameter က တန်ဖိုးနဲ့ set လုပ်ပါ၊ @done ကတော့ default အနေနဲ့ false ထားပါ။ ပြီးရင် TaskTracker class ကို ဆောက်ပါ - initialize ထဲမှာ @tasks = [] ဆိုပြီး empty array တစ်ခု ထားပါ။ add_task(title) method ထဲမှာ Task.new(title) ကို @tasks array ထဲ push (<<) လုပ်ပြီး confirmation message တစ်ခု puts နဲ့ ပြပါ။ ဒါ့အပြင် @tasks array ကို ပြင်ပက ဖတ်လို့ရအောင် tasks ဆိုတဲ့ reader method တစ်ခုလည်း ထည့်ပါ။ နောက်ဆုံးမှာ TaskTracker.new ကနေ tracker object တစ်ခု ဆောက်ပြီး task နှစ်ခုလောက် add_task နဲ့ ထည့်ကာ p tracker.tasks နဲ့ စမ်းကြည့်ပါ။
Code နမူနာ
class Task
attr_accessor :title, :done
def initialize(title)
@title = title
@done = false
end
end
class TaskTracker
def initialize
@tasks = []
end
def add_task(title)
@tasks << Task.new(title)
puts "Added: #{title}"
end
def tasks
@tasks
end
end
tracker = TaskTracker.new
tracker.add_task("Buy milk")
tracker.add_task("Learn Ruby")
p tracker.tasksTerminal မှာ "Added: Buy milk" နဲ့ "Added: Learn Ruby" ဆိုတဲ့ message နှစ်ကြောင်း ပြီးရင် Task object နှစ်ခုပါတဲ့ array တစ်ခု print ထွက်လာပါမယ်။၅ မိနစ် စမ်းကြည့်
task title အပြင် priority (:low, :medium, :high) ဆိုတဲ့ attribute တစ်ခု Task class ထဲ ထပ်ထည့်ပြီး initialize နဲ့ attr_accessor ကို update လုပ်ကြည့်ပါ - 5 minutes အတွင်း စမ်းကြည့်ပါ။
သတိလေးတစ်ချက်
attr_accessor, attr_reader, attr_writer ကို ခွဲခြားသုံးတတ်အောင် သတိထားပါ - done attribute ကို ပြင်ပက update လုပ်ချင်ရင် attr_accessor (ဒါမှမဟုတ် attr_writer) မဖြစ်မနေ လိုအပ်ပါတယ်။