要不要写代码注释
这是一篇人家从 google test blog 翻译过来的文章,2017 年发表的,对要不要写注释的问题直击关键,所以想要对文章加入一些自己的理解,再记录一遍。
在阅读代码时,没有什么东西比一条恰到好处的注释更有帮助。但要注意,注释并非越多越好。有时,一段需要注释的代码,意味着一段需要重构的代码。
只在代码无法自我描述时才添加注释
如果你觉得代码逻辑要用注释才能讲清楚,可能你的代码无法自我描述,不妨先做以下尝试:
- 使用带说明性质的中间变量
原代码:
js
// 减去商品的折扣
finalPrice = numItems * itemPrice - min(5, numItems) * itemPrice * 0.1
重构后:
js
price = numItems * itemPrice
discount = min(5, numItems) * itemPrice * 0.1
finalPrice = price - discount
- 提取方法
原代码:
js
// 过滤敏感词
for (String word: words) {
...
}
重构后:
js
filterOffSensitiveWords(words) // off 表明是删除 而不是拾取
- 使用更加具体的变量
原代码:
js
int width = ...; // 宽度(单位:px)
重构后:
js
int widthInPixels = ...;
- 如果代码中假定了某种情况,则为其添加判断语句
原代码
js
// height 永远大于 0,因此可直接作为除数
return width / height
重构后:
js
checkArgument(height > 0)
return width / height
总结
把注释的意图包含到代码从,从而消除不必要的注释。
以下情况适合添加注释
- 解释代码意图:为何这么做?(不要解释代码做了什么)
js
// 因为开销过大,只计算一次
- 避免他人过于负责,顺手“修复”你的“bug”
js
// 创建一个新的 Foo 实例,因为它不是线程安全的
已知的可能存在问题的代码,使用注释说明为何留下这个问题
- 澄清:可能让他人产生疑问的代码
js
// 必须要注意顺序,因为…
- 解释你为何写了一段看着很糟糕的代码
js
@SuppressWarnings("unchecked") // 无需检查安全性,因为…
往往很多时候,并不能意识到写了很糟糕的代码,否则极可能不会出现糟糕的代码。所以,通常,只有意识到这段代码有更好的方案,依然保留看着很糟糕的代码时,才可能写注释。
其他情况,避免写一些仅仅重申代码在干什么的注释
这些代码只会干扰阅读:
js
// 获取所有用户
useService.getAllUsers()
// 检测 name 是否为空
if (name.isEmpty()) {
// ...
}
对非英语为母语的开发者,让他们准确的使用英语表达代码意图并非易事(我看过不少使用拼音缩写命名变量的开发者),所以对使用了不正确的英文单词、拼音缩写,然后进行注释,是有必要的。
当然,最好是避免随意使用缩写,制造新的英文单词,尤其是拼音缩写,比如
危险区
,wxq
不如weiXianQu
,不如dangerousArea