Skip to content

Commit e752ca3

Browse files
yulin0629claude
andcommitted
feat: 完善場景 2 程式碼解釋教學內容
- 精簡內容聚焦核心學習目標 - 新增 Ghost Text (Auto Complete) 教學 - 更新 Inline Edit 使用說明(強調選取範圍) - 調整商品價格方便測試運費階梯(99-799元) - 使用 emoji 取代破圖的商品圖片 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent 53ef332 commit e752ca3

4 files changed

Lines changed: 155 additions & 79 deletions

File tree

02-code-explanation/README.md

Lines changed: 90 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
1-
# 場景 2:程式碼解釋實作
1+
# 場景 2:程式碼解釋與 Inline Edit
22

33
## 🎯 學習目標
4-
- 學習使用 **@workspace** 參與者來理解整個專案
5-
- 掌握如何請 Copilot 解釋複雜的程式碼
6-
- 了解如何詢問程式碼之間的關聯性
7-
- 探索程式碼的執行流程
4+
- 深入使用 **@workspace** 理解專案架構
5+
- **掌握 Inline Edit (Ctrl+I) 快速修改技巧**
6+
- **理解 Inline Edit vs Chat Edit 使用時機**
87

98
## 📝 場景說明
109
您接手了一個既有的電子商務購物車系統,需要理解其架構和運作方式。透過 GitHub Copilot 的 @workspace 功能,快速掌握整個專案的結構。
@@ -23,61 +22,108 @@
2322

2423
## 📚 Demo 劇本
2524

26-
### 步驟 1:使用 @workspace 了解專案結構
27-
在 Copilot Chat 中輸入:
28-
```
29-
@workspace 請說明這個專案的整體架構和各個檔案的功能
30-
```
25+
### 階段 1:@workspace 程式碼理解 (3分鐘)
3126

32-
### 步驟 2:詢問特定功能的實作
27+
#### 步驟 1:專案架構分析
3328
```
34-
@workspace calculateTotal 函數是如何計算總金額的?它考慮了哪些因素?
29+
@workspace 請分析這個購物車系統的架構,說明主要功能和檔案關係
3530
```
31+
💡 **使用模式:Ask**
3632

37-
### 步驟 3:理解檔案之間的關係
33+
#### 步驟 2:追蹤關鍵函數
3834
```
39-
@workspace cart.js 和 products.js 是如何互相配合的?請說明資料流向
35+
@workspace calculateTotal 函數的運作流程是什麼?它與哪些函數互動?
4036
```
37+
💡 **使用模式:Ask**
4138

42-
### 步驟 4:找出關鍵函數
39+
#### 步驟 3:理解資料流向
4340
```
44-
@workspace 這個購物車系統的核心功能有哪些?請列出最重要的函數
41+
@workspace 當使用者點擊「加入購物車」按鈕時,資料是如何在各個檔案間流動的?
4542
```
43+
💡 **使用模式:Ask**
4644

47-
### 步驟 5:詢問改進建議
48-
```
49-
@workspace 這個購物車系統有什麼可以改進的地方?請從架構和效能角度分析
45+
### 階段 2:Ghost Text 體驗 (2分鐘)
46+
47+
#### 步驟 4:使用註解引導 Auto Complete
48+
1. 開啟 `js/utils.js`
49+
2. 在檔案最後加入詳細的 TODO 註解:
50+
```javascript
51+
// TODO: 加入一個計算折扣的函數
52+
// 函數名稱: calculateDiscount
53+
// 參數: subtotal (小計金額)
54+
// 邏輯: 滿 1000 打 95 折,滿 2000 打 9 折
55+
// 回傳: 折扣後的金額
5056
```
57+
3. 在註解下方開始輸入 `function calc`
58+
4. **暂停 1-2 秒**,觀察灰色的 Ghost Text 建議
59+
5.`Tab` 接受建議,繼續輸入下一行
60+
6. Copilot 會根據註解自動完成整個函數
61+
62+
**關鍵技巧**:詳細的註解 = 更精準的程式碼生成
63+
64+
### 階段 3:Inline Edit 實戰 (3分鐘)
65+
66+
#### 步驟 5:初識 Inline Edit - 優化運費計算
67+
1. 開啟 `js/utils.js`
68+
2. 找到 `calculateShipping` 函數(約第 10-16 行)
69+
3. **選取整個函數內容**(從 function 到結尾的 })
70+
4.`Ctrl+I` (或 `Cmd+I` on Mac)
71+
5. 輸入:`改成階梯式運費:500以下60元,500-1000收30元,1000以上免運`
72+
6. 按 Enter 送出
73+
7. 檢視修改預覽,按 `Ctrl+Enter` 接受
74+
75+
#### 步驟 6:Inline Edit 實用修改 - 整合折扣
76+
1.`js/cart.js` 找到 `calculateTotal` 函數(約 137-146 行)
77+
2. **選取整個 calculateTotal 函數**
78+
3.`Ctrl+I`
79+
4. 輸入:`整合剛剛寫的 calculateDiscount 函數,在運費計算前先計算折扣`
80+
5. 按 Enter,等待 AI 生成程式碼
81+
6.`Ctrl+Enter` 接受修改
82+
83+
#### 步驟 7:測試修改效果
84+
1. 開啟 `index.html` 在瀏覽器中
85+
2. 加入商品到購物車
86+
3. 觀察:
87+
- 運費隨金額變化(步驟 5 的效果)
88+
- 滿額自動打折(步驟 6 的效果)
5189

5290
## 💡 重點提示
5391

54-
### @workspace 使用技巧
55-
1. **全域視角**適合詢問整體架構問題
56-
2. **跨檔案分析**能理解多個檔案之間的關係
57-
3. **程式碼搜尋**快速找到特定功能的位置
58-
4. **最佳實踐**可以詢問程式碼品質建議
92+
### Ghost Text (Auto Complete) 技巧
93+
- **詳細註解**寫明函數名稱、參數、邏輯、回傳值
94+
- **暂停等待**輸入幾個字後停 1-2 秒
95+
- **Tab 接受**看到灰色建議後按 Tab
96+
- **逐行生成**可以一行一行接受或修改
5997

60-
### 常用 @workspace 提示詞:
61-
- "@workspace 這個專案使用了哪些設計模式?"
62-
- "@workspace 請找出所有處理使用者輸入的地方"
63-
- "@workspace 哪些函數可能有效能問題?"
64-
- "@workspace 這個專案的依賴關係是什麼?"
98+
### Inline Edit 快速記憶:
99+
- **選取程式碼 → Ctrl+I**:針對選取範圍修改
100+
- **Ctrl+I 不選取**:AI 會根據游標位置猜測範圍
101+
- **Enter**:送出指令
102+
- **Ctrl+Enter**:接受修改
103+
- **Esc**:取消修改
104+
105+
### Inline Edit vs Chat Edit:
106+
- **Inline Edit**:定點修改,快速直接
107+
- **Chat Edit**:探索修改,需要 AI 定位
65108

66109
## 🎬 Demo 重點
67-
1. 強調 @ 符號的使用方式
68-
2. 展示 @workspace 如何理解多個檔案
69-
3. 示範如何追蹤函數呼叫鏈
70-
4. 展現 Copilot 對程式碼的深度理解
110+
1. **@workspace 的專案理解能力**
111+
2. **Ghost Text 根據註解自動完成**
112+
3. **Inline Edit 的快速修改體驗**
113+
4. **實際運行展示修改效果**
71114

72115
## ✅ 預期成果
73-
完成本場景後,您應該:
74-
- 能夠使用 @workspace 分析整個專案
75-
- 理解如何詢問程式碼的架構問題
76-
- 掌握追蹤程式碼執行流程的技巧
77-
- 對購物車系統有完整的理解
78-
79-
## 🔍 延伸練習
80-
1. 使用 @workspace 找出所有的事件處理器
81-
2. 詢問如何新增優惠券功能
82-
3. 請 Copilot 產生這個系統的架構圖(使用 mermaid)
83-
4. 找出潛在的安全性問題
116+
- 掌握 @workspace 分析專案的能力
117+
- 會使用註解引導 Ghost Text 生成程式碼
118+
- 熟練使用 Inline Edit (Ctrl+I) 快速修改
119+
- 了解 Ghost Text、Inline Edit、Chat Edit 的使用時機
120+
- 能實際看到程式碼修改的效果
121+
122+
## 🔍 快速練習
123+
1. 用 Inline Edit 修改其他函數
124+
2. 試試選取不同範圍使用 Ctrl+I 的差異
125+
3.@workspace 找出可優化的地方
126+
127+
## 🎯 下一步
128+
- 場景 3 將首次引入 Agent 模式(20%)
129+
- 體驗 Agent 與 Ask/Edit 的根本差異

02-code-explanation/js/products.js

Lines changed: 33 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -5,57 +5,57 @@
55
const PRODUCTS = [
66
{
77
id: 'p001',
8-
name: '無線藍牙耳機',
9-
price: 2500,
10-
image: 'https://via.placeholder.com/200x200/4A90E2/FFFFFF?text=藍牙耳機',
11-
category: '3C',
12-
stock: 15,
13-
description: '高品質音效,持久續航'
8+
name: '手機殼',
9+
price: 299,
10+
image: '📱',
11+
category: '配件',
12+
stock: 50,
13+
description: '防摔保護,多色可選'
1414
},
1515
{
1616
id: 'p002',
17-
name: '機械式鍵盤',
18-
price: 3200,
19-
image: 'https://via.placeholder.com/200x200/E24A4A/FFFFFF?text=機械鍵盤',
20-
category: '3C',
21-
stock: 8,
22-
description: '青軸設計,打字手感極佳'
17+
name: '充電線',
18+
price: 199,
19+
image: '🔌',
20+
category: '配件',
21+
stock: 35,
22+
description: '快速充電,耐用材質'
2323
},
2424
{
2525
id: 'p003',
26-
name: '人體工學滑鼠',
27-
price: 1200,
28-
image: 'https://via.placeholder.com/200x200/4AE290/FFFFFF?text=滑鼠',
26+
name: '藍牙喇叭',
27+
price: 799,
28+
image: '🔊',
2929
category: '3C',
3030
stock: 20,
31-
description: '符合人體工學,減少手腕負擔'
31+
description: '360度環繞音效'
3232
},
3333
{
3434
id: 'p004',
35-
name: '筆記型電腦支架',
36-
price: 800,
37-
image: 'https://via.placeholder.com/200x200/E2A04A/FFFFFF?text=支架',
35+
name: '手機支架',
36+
price: 159,
37+
image: '📲',
3838
category: '配件',
39-
stock: 25,
40-
description: '可調整高度,改善姿勢'
39+
stock: 45,
40+
description: '多角度調整,穩固耐用'
4141
},
4242
{
4343
id: 'p005',
44-
name: 'USB-C 集線器',
45-
price: 1500,
46-
image: 'https://via.placeholder.com/200x200/A04AE2/FFFFFF?text=集線器',
47-
category: '配件',
48-
stock: 12,
49-
description: '多合一擴充,支援4K輸出'
44+
name: '無線滑鼠',
45+
price: 499,
46+
image: '🖱️',
47+
category: '3C',
48+
stock: 25,
49+
description: '靜音設計,續航持久'
5050
},
5151
{
5252
id: 'p006',
53-
name: '無線充電板',
54-
price: 600,
55-
image: 'https://via.placeholder.com/200x200/4AE2A0/FFFFFF?text=充電板',
53+
name: '螢幕保護貼',
54+
price: 99,
55+
image: '🛡️',
5656
category: '配件',
57-
stock: 30,
58-
description: '快速充電,支援多種裝置'
57+
stock: 60,
58+
description: '鋼化玻璃,防刮防爆'
5959
}
6060
];
6161

@@ -109,7 +109,7 @@ function createProductCard(product) {
109109
const card = document.createElement('div');
110110
card.className = 'product-card';
111111
card.innerHTML = `
112-
<img src="${product.image}" alt="${product.name}">
112+
<div class="product-image">${product.image}</div>
113113
<h3>${product.name}</h3>
114114
<p class="description">${product.description}</p>
115115
<p class="price">${formatCurrency(product.price)}</p>

02-code-explanation/style.css

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,12 +93,16 @@ main {
9393
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
9494
}
9595

96-
.product-card img {
96+
.product-card .product-image {
9797
width: 100%;
9898
height: 150px;
99-
object-fit: cover;
99+
background: #f0f0f0;
100100
border-radius: 5px;
101101
margin-bottom: 10px;
102+
display: flex;
103+
align-items: center;
104+
justify-content: center;
105+
font-size: 48px;
102106
}
103107

104108
.product-card h3 {

CLAUDE.md

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,32 @@
173173
- 重點展示而非詳細教學每個功能
174174
- 提供實用的 takeaway 工具和模板
175175

176+
## 📌 Git 分支管理策略
177+
178+
### **教學專案分支設計**
179+
- **main 分支**:保持原始教學檔案,供學員下載使用
180+
- **pages 分支**:GitHub Pages 部署分支,教學時在此分支進行修改
181+
182+
### **分支使用流程**
183+
1. **課前準備**
184+
- 確保 `pages` 分支與 `main` 同步
185+
- GitHub Pages 設定使用 `pages` 分支
186+
187+
2. **教學進行時**
188+
- 切換到 `pages` 分支進行 Live Demo
189+
- 所有修改都在 `pages` 分支上進行
190+
- 學員仍從 `main` 分支下載原始檔案
191+
192+
3. **課後處理**
193+
- 可選擇性地將有價值的改進合併回 `main`
194+
- 或保持 `pages` 作為教學歷史記錄
195+
196+
### **優點**
197+
- 學員永遠能取得乾淨的初始專案
198+
- 教師可以自由修改而不影響學員體驗
199+
- GitHub Pages 即時展示修改效果
200+
- 保留教學過程的完整記錄
201+
176202
## 🎯 預期成果
177203

178204
學員完成課程後將能夠:

0 commit comments

Comments
 (0)