Day 4:新增與列出任務
學習目標
- 實作新增任務
- 實作列出任務(含著色)
- 在記憶體中管理任務清單
今日重點
任務儲存(記憶體層)
struct TaskStore {
tasks: Vec<Task>,
next_id: u64,
}
impl TaskStore {
fn new() -> TaskStore {
TaskStore { tasks: vec![], next_id: 1 }
}
fn add(&mut self, title: String) -> &Task {
let task = Task::new(self.next_id, title);
self.next_id += 1;
self.tasks.push(task);
self.tasks.last().unwrap() // 簡化
}
}
列出(含 colored 著色)
use colored::Colorize;
fn print_list(tasks: &[Task]) {
for task in tasks {
let line = format!("[{}] {} ({})",
task.id,
task.title,
if task.done { "✓" } else { "○" },
);
if task.done {
println!("{}", line.green());
} else {
println!("{}", line.yellow());
}
}
}
對應 CLI
match cli.command {
Command::Add { title } => {
store.add(title);
println!("已新增!");
}
Command::List => print_list(&store.tasks),
_ => {}
}
練習
- 完成 TaskStore 的 add 與 print_list。
- 用 clap 接上 Add / List 指令。
- 讓 list 顯示「編號 + 標題 + 狀態」。
自我檢查