《代码整洁之道》读书笔记(下)
错误处理
作者的态度很明确:用异常,不用返回码。
返回码的问题在于调用方可以忽略它,而编译器不会提醒你。异常可以被 try 块拦住,也不会让主流程里塞满 if (err)。
关于要不要写 try-catch,我的理解变成这样:
- 能处理的就处理
- 处理不了的就往上抛
- 不要为了「看起来稳妥」写一个空的 catch
别返回 null,也别传 null
这一条我以为自己做到了,重读之后发现并没有。
// 差
public User find(int id) { return null; }
// 好
public Optional<User> find(int id) { ... }
返回 null 把「有没有」的判断责任推给了调用者,而且没有任何提示。用 Optional(或者 TS 里的 | undefined)能让类型系统帮你查。
注释的正确用法
书里有个观点我很认同:注释是失败的补偿。
能用代码表达的就用代码。注释应该用来解释为什么,而不是做什么。
// 差:说明做了什么(代码本来就说清了)
i++; // i 加一
// 好:说明为什么
// 跳过表头行,数据从第 2 行开始
i++;
测试部分
三条规则值得抄下来:
- 快速:测试跑得慢,就没人跑
- 独立:测试之间不能有依赖
- 及时:写完代码就把测试补上,别等
关于 TDD,书里说得比较理想化。我自己的实践是:核心逻辑先写测试,界面和胶水代码后补。一刀切要求所有代码 TDD,反而会让人放弃。
全书读后
两本书(上、下)读下来,最大的收获不是具体规则,而是建立了一种警惕感:写代码的时候会突然意识到「这个函数是不是太长了」「这个命名是不是在骗人」。
规则是死的,这种警惕感才是能带走的。