写评论的初学者指南?


27

是否有针对初学者的明确代码编写注释指南?

理想情况下,它将涵盖何时(不应该)使用注释以及应包含哪些注释。

这个答案

不要评论您正在做什么,但为什么要这样做。

WHAT由干净,可读和简单的代码处理,并通过适当选择变量名称来支持它。注释显示了代码本身无法(或很难)显示的更高层次的结构。

接近,但是对于没有经验的程序员来说,这有点简洁(我认为在几个示例和极端情况的基础上进行扩展非常好)。

更新:除了这里的答案,我认为这个答案对另一个问题也非常重要。


我认为我们正在迅速过渡到人们不再发表评论的世界。为了更好(更有可能)变得更糟。敏捷。
MK01

1
@MK:如果是这种情况(我倾向于与这个答案更一致),那么解释如何写评论以及为什么应避免评论的指南同样有用。事实上,观点越多越好。
卡梅伦

我认为小注释对提高代码阅读速度非常有帮助,而且将一直如此。我不完全赞成“陈旧的评论”推理,即使它们是陈旧的,它们也具有历史价值。我曾经在一个代码库上工作,偶尔在这里和那里都有详细的注释,但从来没有被注释过时的问题所困扰。
MK01 2011年

Answers:


38

您应该意识到评论的最大弱点:它们变得陈旧。也就是说,随着代码的更改,开发人员很少更新注释以使其与代码保持同步。这意味着您永远无法信任他们,而最终仍会阅读代码。由于这个原因,您的代码应该是自我记录的。您应该以这样的方式选择函数和变量名:代码看起来像散文。

因此,请勿记录该代码在做什么。自文档代码应注意这一点。记录为什么要这样做。WHY通常与业务规则相关或与体系结构相关,并且不会经常更改并且在WHAT上会过时。记录边缘情况。记录例外。记录设计决策。而且最重要的是记录您曾经考虑过但决定不执行的那些设计决策(并记录为什么您决定不使用它们)。


2
最后一个非常重要。有时实施明显的解决方案会产生错误/副作用。记录为什么选择使用其他解决方案,可以防止下一个开发人员在“修复”您看似不好的解决方案时重新引入该错误。
CaffGeek

2
还有一点,我的第一份工作认为注释和代码一样重要。当您进行同行评审时,尝试养成阅读注释和代码的习惯,并尽可能地坚持认为注释是最新的。这有助于避免注释过时,并使代码中记录的业务规则等保持最新。
埃里克·海德里克

10

您应该阅读Robert C. Martin的Clean Code。很好地解释了,如果您需要注释,很可能您编码不正确。理想情况下,您的代码应为“自我注释”。Clean Coder书解释了如何执行此操作,因此不需要注释,并且很好地描述了在必要的情况下如何进行注释。(例如解释一个复杂的数学公式)


尽管我不太希望解释一个复杂的数学公式,而是希望以适当的数学符号(可能是TeX)将其写出,并说明其重要性和来源。如果您不理解该公式,则无论如何都不会弄乱使用该公式来计算某些值的代码,因为您极有可能搞砸并引入(细微或不细微)错误。
的CVn

代码只能说如何,而不是为什么为什么不。您需要对此发表评论。

7

如前所述,Code Complete有各种编写注释的准则。简而言之,它是PDL,可以总结为:

  1. 描述您的意图,而不是代码在做什么。除非使用一些技巧或使用自定义实现,否则请避免描述实现细节。例如,使用移位位进行除法,使用指针算法访问类成员或对某些池对象使用自定义内存分配器。

  2. 首先编写伪代码(即注释),然后在描述完例程/方法/函数后再编写真实代码。所使用的语言是高级的但特定的,因此它可能很冗长

  3. 即使在编写代码之前,也要先了解一下代码的功能

  4. 使注释与实际代码尽可能接近

目的是避免冗长的,可能不合时宜的不相关注释,而要使注释反映代码的意图和目的。使用高级伪代码还有助于在编写实现之前阐明您的想法。

GameDev.net上有一个链接[解释了PDL] [1],以防您不想找本书。


5
首先编写伪代码(即注释)。我完全同意。没有更好的方法来确保注释与代码不匹配。新的编码器(以及要求特别为初学者指南的问问者)会在对它们感到满意之前破解和重构函数一百次,代码将快速移动,重新编写,重新定位,最后,他们可能有一个不错的工作解决方案,但看起来与他们最初的伪代码完全不同。注释在使代码起作用时会被移动和更新吗?您可以打赌他们不会的甜美双唇。我的两分钱。
Binary Worrier

1
同样,伪代码注释将告诉您代码应该做什么。该代码应该告诉您。伪代码不会告诉您代码为什么这样做。-1花花公子,对不起,但我不同意第二点,时代变了。
Binary Worrier

1
不是争论,而是更多的解释-伪代码是为了解释您编写的代码的意图。意思是,注释不是关于实现细节(例如“将x添加到堆栈的顶部”),而是关于代码应该做什么(例如“使窗口出现在所有其他内容的前面”)。正如您正确指出的那样,您需要使用代码移动注释。我不同意代码可以始终告诉您代码在做什么。即使有帮助/准确的评论(如果我写得不错!)也能走很长一段路。最后,仍然恕我直言。
Extrakun 2011年

3
showWindowOnTop(window)在2012年,方法或函数总是比相同性质的注释要好,所有这些都已过时且不建议。1)函数/方法名称描述了意图; 2)伪代码是现代工具链的空洞实践3)测试会告诉您在编写代码之前代码应该执行的操作,4)命名良好的代码比不匹配命名错误的代码的注释更好


1

我的建议是编写一些没有任何注释的代码,然后放弃它。一年后再回来阅读。您不容易理解的部分是您应该评论的部分。


1
嗯,是的;-)虽然这不是特别有用的建议-也许这应该是一条评论?
卡梅伦

您不理解的部分应该用较小的,更命名的部分编写。注释被放入代码中的主要原因是函数/方法冗长,应该是许多较小的自记录部分。

0

我非常喜欢Evan Todd如何总结他对仅有的有用评论类别的观点(引用他的博客):

  • 评论解释原因,而不是原因。这些是最有用的。
  • 用几句话来解释下面的巨大代码的功能。这些对于导航和阅读很有用。
  • 数据结构声明中的注释,解释每个字段的含义。这些通常是不必要的,但有时无法将概念直观地映射到内存,并且必须使用注释来描述该映射。
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.