代码整洁之道四:注释

对注释的态度

注释的恰当用法是弥补我们在用代码表达意图是遭遇的失败。

程序员应当复杂将注释保持咋可维护、有关联、精确的高度。我同意这种说法,但我更主张把力气用在写清楚代码上,直接保证无须编写注释。

只是只在移除地方有:代码。只有代码能忠实地告诉你它做的事。那是唯一真正准确的信息来源。所以,尽管有时也需要注释,我们也应该花心思尽量减少注释量。

注释不能美化糟糕的代码

与其花时间编写糟糕代码的注释,不如花时间清洁那堆糟糕的代码。

用代码来阐述

很多时间,简单到只需要创建一个描述与注释所表达的同一意思的函数即可。

用更好的函数名代替注释

好注释

唯一真正好的注释是你想办法不去写的注释。

法律信息

每隔源文件开头放置的标准注释

这类注释不应是合同或法典,如有可能,就指向一份标准许可或外部文件。

提供信息的注释

有时,利用注释来提供基本信息,例如解释在某个抽象方法中返回值

但是把函数重新命名为responderBeingTested, 注释就是多余的了。

对意图的解释

注释不仅提供有关实现的有用信息,而且还可以提供某个决定后面的意图。即在注释中告诉别人你的想法。

阐释

用注释把某些晦涩难懂的参数或返回值的意义翻译为某种可读形式,会是有用的。不过,通常更好的方法是尽量让参数或返回值自身就足够清除。

当然要注意的是,要确认注释的正确性。

警示

用于警告其他程序员会出现某种后果的注释。

TODO注释

TODO是一种程序员认为应该做,但由于某些原因还没做的工作。他可能是要提醒删除某个不必要的特性,或者要求他人注意某个问题。

IDE都提供了TODO注释的定位及高亮功能,定期查看,删除不在需要的注释。

放大

用注释强调某件事的重要性

公共API中的文档注释

如果在编写公共API,就应该编写良好的文档

坏注释

大多数注释都属于此类,通常坏注释都是糟糕代码的支撑或接口,或者对错误决策的修正。基本上等于程序员自说自话。

喃喃自语

如果只是因为你觉得应该或者因为过程需要添加注释,那就是无谓之举。如果你决定写注释,就必须花时间写好注释。

多余的注释

这种注释并不能比代码本身提供更多信息,它没能证明代码的意义,也没能给出代码的意图或逻辑。

多余的注释:

误导性注释

避免描述不够准确、歧义、误导性的注释,如果连你自己都没搞懂注释的意义,为什么期待别人能懂呢?

循规式注释

每隔函数都要有说明或者每个变量都要有注释。这类注释徒然让代码变得散乱,满口胡言,令人迷糊不解。

日志式注释

废话注释

用整理代码的决心替代创造废话的冲动吧。你会发现自己成为更优秀、更快乐的程序员。

可怕的废话

能用函数或者变量就别用注释

括号后的注释

尽管这对于含有深度嵌套结构函数可能有意义,但只会给我们更愿意编写短小、封装的函数带来混乱。如果你发现自己想标记右括号,其实应该做的事缩短函数。

注释掉的代码

别这么干,直接注释代码,会让你的同事怀疑这代码到底有什么用,造成混乱。

非本地信息

假如你一定要写注释,请确保描述了离它最近的代码。

信息过多

别在注释中添加历史性话题、或者无关的细节描述。

不明显的联系

注释及其描述代码之间的联系应该显而易见。

范例

作者的另一本书《敏捷软件开发:原则、模式与实践》