那些会随时间拖慢团队的问题
函数过长、嵌套过深,或一次做太多事情
未使用的变量、不可达的代码和废弃的函数,让代码库变得杂乱
魔法数字、晦涩的变量名,以及需要博士学位才能理解的代码
用户输入、API 响应和数据边界没有得到适当检查
保持代码可维护性的客观度量
代码中独立路径的数量
> 10 是异味函数中的缩进层级
> 3 难以跟踪每个函数的代码行数
> 30 需要拆分每个函数的参数
> 4 建议使用对象看看质量守护者如何提升代码可维护性
function processOrder(order) {
if (order) {
if (order.items) {
if (order.items.length > 0) {
if (order.customer) {
if (order.customer.active) {
// Finally, the actual logic...
return calculateTotal(order)
}
}
}
}
}
return null
}5 层嵌套 — 难以阅读和维护
function processOrder(order) {
if (!isValidOrder(order)) return null
return calculateTotal(order)
}
function isValidOrder(order) {
return order?.items?.length > 0
&& order?.customer?.active
}提取守卫子句,扁平化结构
function calculateDiscount(total) {
if (total > 100) return total * 0.1
if (total > 50) return total * 0.05
return 0
}魔法数字:100、50、0.1 是什么意思?
const DISCOUNT_TIERS = {
PREMIUM: { threshold: 100, rate: 0.10 },
STANDARD: { threshold: 50, rate: 0.05 },
}
function calculateDiscount(total) {
const tier = Object.values(DISCOUNT_TIERS)
.find(t => total > t.threshold)
return tier ? total * tier.rate : 0
}提取有意义的常量名称
function calc(d, t) {
const r = d / t
const x = r * 3.6
return x
}晦涩的名称:d、t、r、x 什么都没说明
const MS_TO_KMH = 3.6
function calculateSpeedKmh(distanceMeters, timeSeconds) {
const metersPerSecond = distanceMeters / timeSeconds
return metersPerSecond * MS_TO_KMH
}描述性的名称解释用途
质量守护者不仅仅是检查代码语法——它理解意图并提出 有意义的改进建议,让您的代码库更易于使用。
评估函数长度、嵌套和组织结构
提供具体的代码改进,而不仅仅是警告
理解您代码库的模式和约定
测量复杂度
计算圈复杂度和嵌套深度
追踪使用
识别未使用的代码和死分支
评估清晰度
评估命名、结构和可读性
建议重构
提供带示例的具体改进建议
技术债务会累积。质量守护者防止它发生。
干净的代码意味着新开发者能更快理解和贡献
结构良好的代码在需求变化时更容易修改
简单、清晰的代码让 Bug 无处藏身
每个 PR 都是提升或降低质量的机会。
质量守护者确保你始终向前。