提供通用编码最佳实践,涵盖可读性、命名、函数设计、控制流、资源安全、注释规范。在编写代码或进行 code review 时使用。
设计原则(SOLID、设计模式):参见 bp-component-design Skill
特定语言/模块规范:参见相应的 standards skills
| 原则 | 说明 |
|------|------|
| 自解释 | retryCount 而非 n |
| 无魔法数字 | const int SECONDS_IN_DAY = 86400; |
| 布尔命名 | isValid, hasAccess(问题形式) |
| 作用域匹配 | 小作用域可短(i),大作用域要描述性 |
| 原则 | 说明 |
|------|------|
| 单一职责 | 一个函数做一件事;名字需要 "And" 说明做太多了 |
| 参数精简 | 超过 3-4 个参数 → 考虑结构体封装 |
| const 正确 | 不修改的参数标 const,防止意外修改 |
Guard Clause:失败情况先处理并返回,主逻辑保持左对齐
Early Return:显式采用 early return 编程范式,尽量将可 early return 的检查前置。
// ❌ 深层嵌套
if (order != nullptr) {
if (order->isValid()) {
if (order->hasItems()) {
// main logic
}
}
}
// ✅ Guard Clause
if (order == nullptr) return;
if (!order->isValid()) return;
if (!order->hasItems()) return;
// main logic (not nested)
| 原则 | 说明 | |------|------| | RAII | 资源生命周期绑定对象生命周期,避免手动清理分散在多条路径 | | 所有权显式 | 区分 owner 与 borrower,避免隐式转移所有权 | | 窄作用域 | 变量声明靠近首次使用,减少悬空与误用概率 |
跨语言场景统一要求:新增分支/返回路径时,必须检查资源契约是否闭环(释放类资源 + 触发类资源)。
当新增 return、early exit 或新分支时,必须逐一检查函数入口处获取的所有"契约性资源"。
契约性资源:函数持有但不拥有、需要在特定时机交还/触发的资源:
检查方法:
| ❌ 反例 | ✅ 正例 |
|--------|--------|
| 新分支只清理了数据结构,忘了 callback 的执行契约 | 对照已有的 early return 路径,发现它调用了 callback->Run(),新路径也需要 |
| 假设"返回成功后调用方会处理 closure" | 检查调用方逻辑,确认 closure 执行责任的真实归属 |
| 只关注"要释放什么",忽略"要触发什么" | 同时检查释放类资源(锁、内存)和触发类资源(回调、事件) |
| 场景 | 做法 | |------|------| | 何时写 | 仅当意图不明显时;复杂算法;公共 API | | 写什么 | Why(为什么这样做),不是 What(做了什么) | | TODO | 包含上下文和负责人 |
// ❌ 复述代码
// Increment i by 1
++i;
// ✅ 解释意图
// Skip index 0 because it is the sentinel slot.
for (size_t i = 1; i < slots.size(); ++i) { ... }
| 场景 | 做法 |
|------|------|
| 关键分支覆盖 | 至少覆盖无数据快速返回、异常状态转换、错误返回三个分支 |
| 级别选择 | DEBUG 记录成功路径和排障上下文,WARN 记录异常但可恢复路径,ERROR 记录失败路径 |
| 上下文信息 | 日志中携带最小必要上下文(如 request_id、key、error_code),避免无上下文日志 |
npx skills add davidYichengWei/bp-coding-best-practices下载完整 Skill 目录,包含 SKILL.md 及所有相关文件
Search for places (restaurants, cafes, etc.) via Google Places API proxy on localhost.
Interact with GitHub using the `gh` CLI. Use `gh issue`, `gh pr`, `gh run`, and `gh api` for issues, PRs, CI runs, and advanced queries.
Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.
Start voice calls via the OpenClaw voice-call plugin.
Notion API for creating and managing pages, databases, and blocks.
Gemini CLI for one-shot Q&A, summaries, and generation.
Category:developer