《代码大全(第二版)》读书笔记(5)· 变量、语句与代码改进

《代码大全(第二版)》读书笔记(中)· 变量、语句与代码改进
变量部分看似琐碎,其实是缺陷的重灾区。作者给出的原则是:每个变量只承担一个用途,尽量在使用处就近声明,能初始化就初始化,作用域和存活时间越小越好,用命名常量替代含义不明的魔法数。而在命名这一章,作者把它称为投入产出比最高的质量投资,一个准确具体、能自解释的名字,胜过一大段注释。名字的长度应与作用域成正比,作用域越大名字越要具体;布尔变量用 is、has、can 这样的前缀,让条件判断读起来像自然语言。
到了语句部分,核心理念是让代码读起来像人话。条件语句要把正常、常见的情况放在前面,用正向条件替代双重否定,尽量避免深层嵌套,因为嵌套一深人脑就跟踪不过来。循环的三个要素——初始化、终止条件和递进——必须放在一起、一目了然,绝不能在循环体内部偷偷修改循环变量。而表驱动方法这一章堪称点睛之笔:当逻辑本质是把输入映射到输出时,用一张表来驱动,比几十个 if-else 或 switch 清晰得多,改规则就是改表而非改逻辑,业务规则从代码里剥离出来变成了数据。
代码改进这一部分,作者先讲了一个核心信念:质量是免费的,低质量才昂贵。评审、结对、走查这些协同构建手段是发现缺陷效率最高的方式,别人的眼睛能看见你自己视而不见的问题。开发者测试强调测试的目的是找缺陷而非证明没 bug,一定要覆盖正常路径、边界条件和错误路径,边界值尤其重要。调试是一门科学,不是靠猜和乱改碰运气,而是复现、假设、验证、定位根因、修复、回归这样一套严谨流程。重构是在不改变外部行为的前提下改善内部结构,必须小步进行,每一步都有测试保护,先让代码能跑再让它变好。谈到性能,作者引用了高德纳那句名言——过早优化是万恶之源,一定要先测量、找到真正瓶颈,再去优化那真正慢的一小部分代码。
这几处好代码与坏代码的对比值得反复咀嚼。同样是算两个向量的点积,坏代码用 x、a、b 这样含义不明的名字,好代码则用点积、向量这样自解释的命名,功能完全一样,但后者让“这是在算点积”不需要注释就能读懂。条件判断也是一样,把“未就绪”的否定改成“就绪”的正向表达,读者就不必在脑子里做一次逻辑反演。表驱动把几十个 if-else 替换成一张费率表,让规则一目了然、易于修改和扩展。防御式编程最经典的对比是,一个空异常捕获块会把除以零的错误悄悄掩盖,而在函数入口用断言校验除数不为零,则能让错误第一时间大声暴露。重构的例子则是把一段重复且过长的处理逻辑,提取成计算折扣、计算运费、校验订单这样几个职责单一的短函数。

posted @ 2026-11-10 11:49  gcdoublebest  阅读(3)  评论(0)    收藏  举报