Fork me on GitHub

注释还是不注释

Google代码健康

Posted by Kaelzhang on July 12, 2020

Google代码健康:注释还是不注释

本文源于Google公司的马桶上的健康代码,作者:Chris Lewis & Bob Nystrom

在阅读代码时,通常没有什么比有适当的注释更有用的了。 但是,有注释也并不总是好事。 有时需要注释的原因可能表明应该开展代码重构活动。

如果无法使编写的代码不言自明,请使用注释。 如果需要用注释来解释一段代码的作用,请首先尝试下面的方法:

  • 引入解释型变量

反例:

// Subtract discount from price. 
finalPrice = (numItems * itemPrice) - min(5, numItems) * itemPrice * 0.1;

正例:

price = numItems * itemPrice; 
discount = min(5, numItems) * itemPrice * 0.1; 
finalPrice = price - discount;
  • 抽取一个方法

反例:

// Filter offensive words.

for (String word : words) { ... }

正例:

filterOffensiveWords(words);
  • 使用更具描述性的标识符名称

反例:

int width = ...; // Width in pixels.

正例:

int widthInPixels = ...;
  • 为代码的假设添加检查

反例:

// Safe since height is always > 0. 
return width / height;

正例:

checkArgument(height > 0); 
return width / height;

在某些情况下,评论可能会有所帮助:

  • 揭示意图:解释代码为什么要执行某些操作(而不是其他操作)
// Compute once because it’s expensive.
  • 避免未来热心的程序员错误地“修复”了不该修复的代码
// Create a new Foo instance because Foo is not thread-safe.
  • 澄清:在代码评审期间可能出现的问题或代码读者可能遇到的问题
// Note that order matters because...
  • 解释看起来像不良的软件工程实践的理由
@SuppressWarnings("unchecked") // The cast is safe because...

另一方面,请避免仅重复代码的注释。 这些只是噪音:

示例1:

// Get all users. 
userService.getAllUsers();

示例2:

// Check if the name is empty. 
if (name.isEmpty()) { ... }

  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!