第 02 课 | 第二幕:计算引擎
💡 进群学习加 wx: agentupdate
(申请发送: agentupdate)
(申请发送: agentupdate)
第二幕:计算引擎(第4-5集)
从空白 app.js 到完整的计算引擎
第4集:先写测试,再写代码
场景:第一行代码不是 function add(),是测试。
- TDD 是什么:红灯 → 绿灯 → 重构(三步循环)
- 第一个测试:
expect(evaluate("2+3×4")).toBe(14) - 实现 tokenization:把
"2+3×4"拆成[2, +, 3, ×, 4] - 实现 shunting-yard:把中缀变后缀
[2, 3, 4, ×, +] - 实现 RPN 求值:
2, 3×4=12, 2+12=14✓ - 跑通第一个绿灯的感觉
- 计划怎么来:
/gsd-plan-phase 1拆成 3 个 Plan,plan-checker 验证 - 执行怎么来:
/gsd-execute-phase 1子 agent 并行,每个独立 200k 上下文 - 核心概念:测试不是事后的补充,是设计的工具
产出文件:
app.js— tokenization + shunting-yard + RPN 求值tests/engine/parse.test.js— 解析器测试tests/engine/evaluate.test.js— 求值器测试.planning/phases/01/PLAN-01.md~PLAN-03.md— 3 个执行计划
对应命令:/gsd-plan-phase 1,/gsd-execute-phase 1 --auto
第5集:处理那些"边界情况"
场景:基础运算搞定了,但真实用户不会只算 2+3。
0.1 + 0.2 = 0.3(不是0.300...04)—— 缩放整数精度方案实装5 ÷ 0 = Error—— 除零优雅处理,返回错误字符串而非抛异常100 + 5%等于多少?—— 百分号有两种语义(加/减是比例,乘/除是除以100)+/-切换、括号嵌套、连续运算符替换- 结果格式化:12 位精度,去尾零,极小数避免科学记数法
- 历史管理:FIFO 队列,最多 10 条,immutable return
/gsd-verify 1目标回溯:从 Phase 目标倒查每个"必须为真"的陈述- 核心概念:边界情况才是主要工作
产出文件:
app.js— 完整计算引擎(parse / evaluate / format / history)tests/engine/format.test.js— 格式化测试tests/engine/percent.test.js— 百分号测试tests/engine/error.test.js— 错误处理测试.planning/phases/01/VERIFICATION.md— 验证报告.planning/phases/01/REVIEW.md— 代码审查报告
对应命令:/gsd-execute-phase 1(续),/gsd-verify 1,/gsd-code-review