第4章 编码规范实践
命名规范 · 代码注释 · 格式化工具 · 审查清单
4.1 命名规范
一致的命名是代码可读性的基石。团队应约定变量、函数、类、常量等标识符的命名风格,并借助工具强制检查。
| 元素 | 推荐风格 | 示例 |
|---|---|---|
| 变量 / 函数 | camelCase | userName, getOrderTotal() |
| 类 / 接口 | PascalCase | UserProfile, PaymentGateway |
| 常量 (全局) | UPPER_SNAKE_CASE | MAX_RETRY_COUNT |
| 私有属性 | _camelCase (前缀下划线) | _internalId |
| 布尔值 | is / has / should 前缀 | isActive, hasPermission |
图4-1 命名规范快速决策
4.2 代码注释规范
注释应解释“为什么”而非“是什么”。推荐使用 JSDoc / Docstring 风格,并遵循以下原则:
- 公共 API:必须包含用途、参数、返回值、异常。
- 复杂逻辑:用行注释说明算法意图。
- TODO / FIXME:附带责任人及跟踪链接。
- 避免:冗余注释、注释掉的代码块(应直接删除)。
/**
* 计算订单折扣金额
* @param {number} total - 订单原始总价
* @param {string} couponCode - 优惠券代码
* @returns {number} 折扣后金额
* @throws {InvalidCouponError} 当优惠券无效时
*/
function applyDiscount(total, couponCode) {
// 黑五期间额外叠加折扣 (临时逻辑)
if (isBlackFriday) {
return total * 0.7;
}
// ... 其余逻辑
}
图4-2 注释层次结构
4.3 代码格式化工具
自动化格式化消除风格争议,保证仓库一致性。主流工具对比:
| 语言 | 工具 | 配置文件 | 集成方式 |
|---|---|---|---|
| JavaScript / TypeScript | Prettier | .prettierrc | 编辑器 + CI |
| Python | Black | pyproject.toml | pre-commit hook |
| Java | Google Java Format | .google-java-format | Gradle / Maven 插件 |
| Go | gofmt | 内置标准 | go fmt |
推荐在项目中统一配置,并在 CI 阶段执行格式化检查。
图4-3 格式化工具集成流程
4.4 代码审查清单
审查清单帮助 Reviewer 聚焦关键点,避免遗漏。以下为核心检查项:
- 命名与风格:是否符合团队规范?有无拼写错误?
- 注释质量:公共接口是否文档化?复杂逻辑是否解释?
- 代码重复:是否存在可抽取的公共逻辑?
- 错误处理:边界条件、异常路径是否覆盖?
- 安全性:输入校验、SQL注入、XSS 防范。
- 性能:不必要的循环、大对象分配、N+1 查询。
| 类别 | 检查项 | 严重程度 |
|---|---|---|
| 可读性 | 命名清晰、注释恰当 | 中 |
| 正确性 | 逻辑完备、边界覆盖 | 高 |
| 可维护性 | 低耦合、高内聚 | 中 |
| 安全 | 无敏感信息泄露 | 高 |
图4-4 代码审查关注维度