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),
    _ => {}
}

練習

  1. 完成 TaskStore 的 add 與 print_list。
  2. 用 clap 接上 Add / List 指令。
  3. 讓 list 顯示「編號 + 標題 + 狀態」。

自我檢查

  • 能新增任務(add)
  • 能列出任務(list)
  • 會用 colored 著色
  • CLI 與 store 已串起來(記憶體版)