移除死代码
移除死代码(Remove Dead Code)删掉不再被调用的函数、永远不会执行的分支和被注释掉的代码块。 它解决的痛是:读代码的人分不清哪些代码还在起作用,花时间去理解一段其实没人用的逻辑,甚至小心翼翼地维护它。
一个价格模块里,旧版的折扣函数早就被新函数取代,但还留在文件里;另一个函数里有一个针对“2019 年双十一”的分支,日期条件永远不会再满足。
"""价格模块:清理前。"""
def old_discount(price: float) -> float: # 2023 年起不再使用 return price * 0.85
def discount(price: float, today: str) -> float: if today == "2019-11-11": return price * 0.5 # return price * 0.9 旧规则,先留着 return price * 0.95
if __name__ == "__main__": print(discount(100, "2026-10-07"))
# 输出:# 95.0// 价格模块:清理前。export function oldDiscount(price: number): number { // 2023 年起不再使用 return price * 0.85;}
export function discount(price: number, today: string): number { if (today === "2019-11-11") return price * 0.5; // return price * 0.9; 旧规则,先留着 return price * 0.95;}
console.log(discount(100, "2026-10-07"));
// 输出:// 95"""价格模块:清理后。"""
def discount(price: float) -> float: return price * 0.95
if __name__ == "__main__": print(discount(100))
# 输出:# 95.0// 价格模块:清理后。export function discount(price: number): number { return price * 0.95;}
console.log(discount(100));
// 输出:// 95删掉了三样东西:没人调用的 old_discount、永远不会再进入的 2019 年分支、注释掉的旧规则。today 参数只被那个死分支用到,也一并去掉,调用方跟着改(第 6 章)。函数从八行变成两行,读者不用再琢磨“这个分支什么时候会走到”。
定义与适用场景
Section titled “定义与适用场景”移除死代码:删除不会被执行的代码。确认它真的死了的办法:IDE 的 Find Usages 或全文搜索找不到调用方;覆盖率报告显示从未执行;分支的条件在逻辑上不可能成立。注意 IDE 看不到的调用方:通过字符串名字反射调用的函数、配置文件里登记的回调、公开库里被外部用户调用的接口。“以后可能用得上”不是保留的理由,版本控制里永远找得回来,在提交说明里写清删了什么,需要时搜一下提交历史即可。
什么时候别用
Section titled “什么时候别用”公开发布的库里的函数,你看不到所有调用方,不能直接删,要先标弃用、过几个版本再删,见第 6 章的迁移式做法。功能开关控制的代码在开关关闭期间看起来是死的,其实只是暂时不走,删之前先确认开关的计划。