第 3 課:使用您的程式庫
學習目標
完成本課程後,您將能夠:
- 了解 Claude 如何維護專案脈絡
- 使用 Grep 和 Glob 工具搜尋檔案
- 使用
@參照特定檔案 - 詢問關於程式碼的聰明問題
- 執行簡單的重構任務
- 有效地導覽不熟悉的程式庫
先決條件
- 完成第 1-2 課 - 基本操作和權限
- 一個要處理的專案 - 使用範例專案或您自己的
- 基本檔案系統知識 - 理解目錄和路徑
預估時間: 30 分鐘
專案脈絡與覺察
Claude Code 不僅處理個別指令 - 它維護您整個專案結構和對話歷史的覺察。
Claude 如何維持脈絡
- 對話歷史: 記住您討論過的內容
- 檔案操作: 追蹤已讀取或編輯的檔案
- 目錄結構: 理解您的專案佈局
- Git 歷史: 可存取提交記錄(如果可用)
為什麼脈絡很重要
沒有脈絡:
您> "修復 user 函式中的 bug"
Claude: "哪個 user 函式?哪個檔案?"
有脈絡:
[您一直在處理 authentication.py]
您> "修復 user 函式中的 bug"
Claude: "我看到 validate_user 函式中的問題..."
對話連續性
Claude 會記住跨交換的內容:
您> "讀取 models.py 中的 User 類別"
[Claude 讀取檔案]
您> "新增電子郵件欄位"
[Claude 知道您指的是 models.py 中的 User 類別]
搜尋檔案:Grep 和 Glob
在處理程式庫時,您經常需要找到特定的程式碼模式或檔案。Claude 使用兩種強大的搜尋工具。
Grep:搜尋檔案內容
Grep 搜尋檔案內部的特定文字或模式。
基本用法:
您> 在所有 Python 檔案中搜尋 "TODO" 註解
更具體:
您> 在 src/ 目錄中找出所有以 "get_user" 開頭的函式
模式匹配:
您> 使用 regex 搜尋電子郵件驗證模式
Claude 使用類似 grep 的搜尋來尋找:
- 函式定義
- 變數名稱
- 註解和標註
- 匯入陳述式
- 錯誤訊息
Glob:依模式尋找檔案
Glob 依名稱模式尋找檔案。
基本用法:
您> 列出專案中的所有測試檔案
特定副檔名:
您> 在 src/ 目錄中找出所有 TypeScript 檔案
複雜模式:
您> 顯示所有設定檔(*.json、*.yaml、*.toml)
結合搜尋
您可以結合搜尋策略:
您> 在 components 目錄(Glob)中找出匯入 React(Grep)的檔案
Claude 將會:
- 使用 Glob 找出
components/中的檔案 - 使用 Grep 搜尋 React 匯入
- 呈現結果
理解檔案操作
Claude 有三個主要的檔案操作工具。
Read 工具
用途: 查看檔案內容而不修改
Claude 使用時機:
- 您明確要求讀取檔案
- Claude 需要脈絡來回答問題
- 在進行變更前理解程式碼
範例:
您> calculate_total 函式做什麼?
[Claude 使用 Read 查看函式]
Edit 工具
用途: 修改現有檔案
Claude 使用時機:
- 更新函式
- 修復 bug
- 重構程式碼
- 新增匯入
範例:
您> 為 API 呼叫新增錯誤處理
[Claude 使用 Edit 修改函式]
Edit 的運作方式:
- 顯示確切差異(變更)
- 只修改特定部分
- 保留其餘檔案
Write 工具
用途: 建立新檔案
Claude 使用時機:
- 建立新模組
- 新增設定檔
- 撰寫測試檔
- 產生文件
範例:
您> 為 User 類別建立測試檔案
[Claude 使用 Write 建立 user_test.py]
使用 @ 參照檔案路徑
@ 符號讓您直接在訊息中參照特定檔案。
基本用法
您> @src/main.py 做什麼?
這告訴 Claude 讀取 src/main.py 並解釋它。
多個檔案
您> 比較 @src/utils.py 和 @src/helpers.py
Claude 將讀取兩個檔案並比較它們。
有空格的檔案路徑
如果您的路徑有空格,使用引號:
您> 讀取 @"my folder/file.py"
相對路徑
@ 支援從目前目錄的相對路徑:
您> 檢查 @./config.json
您> 查看 @../shared/utils.js
使用 @ 的優點
- 明確: Claude 確切知道您指的是哪個檔案
- 快速: 跳過「哪個檔案?」的問題
- 精確: 檔案名稱沒有歧義
不用 @ 的範例:
您> "讀取認證檔案"
Claude: "哪個認證檔案?auth.py?login.py?"
用 @ 的範例:
您> "讀取 @src/auth.py"
Claude: [立即讀取正確的檔案]
詢問關於程式碼的問題
Claude 的強大功能之一是解釋和分析程式碼。
您可以問的問題類型
理解程式碼:
您> @src/auth.py 中的認證流程如何運作?
尋找關係:
您> 哪些函式呼叫 process_payment 函式?
識別問題:
您> @models/user.py 中有潛在的 bug 嗎?
解釋概念:
您> 控制器類別中使用什麼設計模式?
程式碼審查:
您> 審查 @api/endpoints.py 的安全性問題
有效提問策略
具體說明:
- ❌ "這段程式碼做什麼?"
- ✅ "validate_token 函式如何運作?"
提供脈絡:
- ❌ "修復這個"
- ✅ "登入函式無法正確處理空密碼"
參照檔案:
- ❌ "user model"
- ✅ "@models/user.py"
解釋您的目標:
- ❌ "變更資料庫"
- ✅ "我想為所有使用者記錄新增 created_at 時間戳記"
簡單重構任務
重構意味著在不變更行為的情況下改善程式碼結構。Claude 擅長此道。
常見的重構任務
重新命名變數/函式:
您> 為了清晰度,將 'd' 變數重新命名為 'user_data'
提取函式:
您> 將電子郵件驗證邏輯提取到個別函式
簡化複雜程式碼:
您> 簡化 @utils/parser.py 中的巢狀 if 陳述式
新增型別提示:
您> 為.calc.py 中的所有函式新增型別提示
改善命名:
您> 將函式 'proc' 重新命名為更具描述性的名稱
組織匯入:
您> 排序和組織 @main.py 中的匯入
重構工作流程
- 讀取程式碼 - Claude 分析目前的實作
- 提出變更 - Claude 建議改進
- 審查差異 - 您看到確切將變更的內容
- 核准 - 套用變更
- 測試 - 驗證重構的程式碼可運作
範例:
您> handle_request 函式太長了。將其分解為較小的函式
Claude: [讀取檔案]
Claude: 我將此函式分解為三個函式:
- parse_request()
- validate_request()
- process_request()
[Claude 顯示建議的重構與差異]
您: [核准變更]
Claude: [套用重構]
實務範例:探索範例專案
讓我們用真實的專案結構來練習。
步驟 1:導覽至範例專案
cd ~/claude-tutorial/docs/examples/sample-project
步驟 2:啟動 Claude Code
claude
步驟 3:探索專案結構
您> 這個專案有什麼檔案?顯示目錄結構
Claude 將會顯示組織。
步驟 4:尋找特定函式
您> 找出所有處理使用者輸入的函式
Claude 將會使用 Grep 搜尋相關函式。
步驟 5:理解特定檔案
您> 讀取 @src/calculator.py 並解釋它如何運作
步驟 6:識別關係
您> 哪些檔案匯入 Calculator 類別?
Claude 將會搜尋匯入並顯示相依性。
步驟 7:建議改進
您> 查看 @src/calculator.py 並建議任何改進
Claude 將會分析並提出重構建議。
步驟 8:進行簡單變更
您> 為 @src/calculator.py 新增平方根函式
審查建議的變更,如果看起來不錯就核准。
✅ 檢查您的理解
-
Grep 和 Glob 的差別是什麼?
- 它們是同一個東西
- Grep 搜尋檔案內容,Glob 依名稱尋找檔案
- Glob 搜尋檔案內容,Grep 依名稱尋找檔案
- 兩者都不搜尋任何東西
-
@src/main.py 在訊息中做什麼?
- 建立新檔案
- 告訴 Claude 讀取該特定檔案
- 刪除該檔案
- 執行該檔案
-
Claude 應該使用哪個工具來修改現有檔案?
- Read
- Edit
- Write
- Bash
-
True 或 False: Claude 會記住對話脈絡。
- True
- False
-
如何要求 Claude 找出所有測試檔案?
- "搜尋測試"
- "找出名稱中有 'test' 的檔案"
- "Glob 搜尋測試檔案"
- 以上皆可
答案: 1-b, 2-b, 3-b, 4-True, 5-d
總結
在本課程中,您學到了:
- 專案脈絡 - Claude 維護程式庫的覺察
- Grep - 搜尋檔案內容的模式
- Glob - 依名稱模式尋找檔案
- 檔案操作 - Read、Edit、Write 工具
- @ 符號 - 直接參照特定檔案
- 提問 - 獲得程式碼解釋和分析
- 重構 - 使用 Claude 的協助改善程式碼結構
下一步
在**第 4 課:權限與安全**中,您將學到:
- 為什麼有不同權限模式
- 如何使用計畫模式
- 在模式之間切換
- 設定允許/拒絕的操作
進階閱讀
繼續至第 4 課:權限與安全 →