评论写作和文档的最佳实践


20

如今评论比以往任何时候都容易。在Java中,有一些将注释链接到类的很好的技术,而Java IDE擅长为您创建注释外壳。像Clojure这样的语言甚至都允许您在函数代码本身中添加对函数的描述作为参数。

但是,我们仍然生活在一个时代,好开发者经常发表过时或较差的评论-我对提高评论的鲁棒性和实用性很感兴趣。

特别是在这里,我对Java / Clojure / Python感兴趣,但是答案不需要特定于语言。

是否有任何新兴技术可以验证注释并自动检测“模糊”注释(例如,带有魔术数字的注释,不完整的句子等)或不正确的注释(例如,检测拼写错误的变量等)。

更重要的是:那里是否存在公认的“评论政策”或策略?那里有很多关于如何编码的建议-但是“如何发表评论”呢?

Answers:


40
  • 名称/文档会告诉你什么,你在做什么。

  • 实施应该告诉你如何你正在做它。

  • 注释应告诉您为什么要按照自己的方式进行。


6
注释还应告诉您为什么不以其他方式进行操作(即重要的设计选择),因为否则将来的维护人员将不会获得此信息。

2
我相信很多时候评论都应该说你在做什么。我认为,仅“为什么”注释的想法是一种反模式。可以将所有代码编写得足够清晰,以使任何程序员都能一眼就能理解,这是一个神话,而我的经验是,大多数程序员认为自己编写的代码不清晰。就像说:“我不必用描述性的方式命名此函数,因为任何人都可以阅读该函数中的代码以查看其功能。” -那也没有道理,对吗?
dallin 2013年

2
@dallin,如果您的代码不清楚它在做什么;考虑重构它。否则,添加一条注释,说明为什么要这样实现(恰好也说明了这样做的效果)。您与描述性名称的比较是apples / oranges,描述性名称使您可以清楚地知道该函数的使用位置,并且您可能无法访问该函数的源代码。
棘轮怪胎

@dallin:“您可以清楚地编写所有代码,以使任何程序员都能一眼理解它,这是一个神话,鲍勃叔叔希望与您谈一谈。-“我不必用描述性的方式来命名该函数,因为任何人都可以阅读该函数中的代码以查看其功能。”,给变量和方法起好而清晰的名字正是程序员应该如何清楚其代码的含义是在做!
克拉

14

这可能会引起争议,但是我的建议是尽可能写FEW评论。改用漂亮的,清晰的类名,变量名和方法名。以最清晰的方式编写代码;并认为这是代码中最重要的属性(除了满足要求之外)。仅当您已使方法尽可能清晰时才写评论,并且您仍然认为它需要进一步说明。

并且具有组织上的惯例,即任何人以任何方式更改班级时,都必须确保评论仍然正确。


1
这是一个好的开始,但是我认为要满足OP的问题,您需要编写一些内容来解决他在自动验证方面的实际问题。
罗伯特·哈维

2
+1-我还认为注释仅应用于解释为什么编写代码。我知道会做什么if (a == b) then c();,但是如果我不知道为什么会这样-那是应该使用评论的时间:)
Deco

装饰-我完全同意。当我想了解特定方法如何适合整个流程时,评论会很好。换句话说,为什么要调用此方法,或者为什么要执行此操作。
达伍德说要恢复莫妮卡(Monica)

除了使书面代码清晰外,我们还应确保使用TODO注释保留(代码级)思想,想法等。例如,如果您看到一个函数/类能够正确处理当前数据大小,但有可能在2年后无法处理负载,那么请确保使用TODO注释在其中写出您的观察结果。未来的开发人员确实会感谢您的努力。永远不要尝试在单独的txt / word文档中记录这些内容,而在编写代码时,没有人真正引用过此类文档。
TechCoze 2011年


5

我不确定其他语言,但是python允许您编写doctest,这是一种自我验证的注释形式。当然,它们不应代替实际的单元测试,而是一种记录特定功能的快速简便的方法,这些功能可能不那么应有。它们具有能够执行注释测试以验证注释仍然正确(至少其中包含测试的部分)的附加好处。


1
Sphinx将代码与文档进行比较,以提供覆盖率指标。
S.Lott

3

doxygen是找到如何使用代码注释自动生成文档的最权威的位置之一。虽然可以给我更多这样的工具。

这定义了注释编写的标准,应该遵循该标准来自动生成文档。但是,这提供了更多的结构,但没有语义上的验证。例如,它无法检查您是否使用了误导性的英语来描述功能的目的!

虽然这是使注释结构化的最好方法,但我个人认为需要更多文档来使代码更具可维护性。一段时间以前,P.SE中存在一个问题。代码可以作为开源开发人员工具中的文档吗?多久一次?当然,这也适用于非开源项目。

为了使代码更易于维护-实际上,更重要的是存在一个外部文档来帮助创建如何对待代码的结构,然后应限制代码内部的注释以查看

我认为,如果要定义注释编写的策略,则应将其作为编码标准中包括的整体方法。看到这个:在开发团队中引入样式指南和文档生成软件可能会有什么陷阱?

通常,注释占不到代码的5%。而且在实践中,虽然代码审查本身引起的关注要少得多(在开发的其他方面),但也很难对注释进行审查。


1
我不同意这里的最后一句话。我刚刚完成合同,在团队负责人的带领下进行了非常详细的审查。他的评论总是包含评论-它们的措辞,变量名是否正确,它们是否包含将来的开发人员可能想知道的所有信息。不久,我知道他希望在每个评论中看到什么,并且能够提出符合他的标准的评论。因此,只要有代码审查的组织政策,并在代码审查中包括注释,便会实现。
达伍德说应

这通常是我写的唯一注释,特别是对于记录进出的内容的方法(我使用松散类型的语言)。
DanMan

2

是否有任何新兴技术可以验证注释并自动检测“模糊”注释(例如,带有魔术数字的注释,不完整的句子等)或不正确的注释(例如,检测拼写错误的变量等)。

有一个众所周知的技术-它被称为“代码审查”,并有一个姐妹叫做“配对编程”。不要在这里“自动地”期望任何东西。

更重要的是:是否有公认的“评论政策”或策略?关于如何编码,这里有很多建议,但是“如何发表评论”呢?

“代码完成”不仅包含有关如何编码的所有内容,还包含有关“如何注释”的章节,尤其是有关如何编写自文档代码的章节。


+1代表代码完成。罗伯特·马丁(Robert Martin)撰写的《清洁代码》(Clean Code)在撰写有用的表彰方面也有很好的一章。我不确定Java世界,但在.NET世界中,我们有Resharper,它可以“自动”验证注释中对代码元素的引用:)
MattDavey

0

我最喜欢的一种特定于Java的资源是Oracle的《如何为Javadoc工具编写文档注释》

本文档描述了在Java软件Sun Microsystems编写的Java程序的文档注释中使用的样式指南,标签和图像约定。

第44项:对所有公开的API元素写文档注释

如果要使用某个API,则必须对其进行记录。传统上,API文档是手动生成的,因此要使其与代码保持同步是一件很麻烦的事情。Java编程环境通过Javadoc实用程序简化了此任务。Javadoc通过带有特殊格式的文档注释(通常称为doc注释)的源代码自动生成API文档。

来自有效Java第二版

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.