Day 5:完成與刪除任務
學習目標
- 實作標記完成
- 實作刪除任務
- 用 Option 處理「找不到」的情況
今日重點
標記完成
impl TaskStore {
fn mark_done(&mut self, id: u64) -> Option<()> {
let task = self.tasks.iter_mut().find(|t| t.id == id)?;
task.done = true;
Some(())
}
}
? 後接 iter_mut().find(),若找不到回傳 None;找到就改 done。
刪除任務
impl TaskStore {
fn remove(&mut self, id: u64) -> Option<Task> {
let pos = self.tasks.iter().position(|t| t.id == id)?;
Some(self.tasks.remove(pos))
}
}
對應 CLI(處理找不到)
match cli.command {
Command::Done { id } => {
if store.mark_done(id).is_some() {
println!("任務 #{} 已標記完成!", id);
} else {
eprintln!("找不到任務 #{}", id);
}
}
Command::Remove { id } => {
if let Some(removed) = store.remove(id) {
println!("已刪除:{}", removed.title);
} else {
eprintln!("找不到任務 #{}", id);
}
}
_ => {}
}
練習
- 完成 mark_done 與 remove 方法。
- 接上 Done / Remove 指令並正確處理找不到。
- 測試:新增 → 完成 → 刪除。
自我檢查