评论是否被视为文件形式?


11

当我为自己编写小型脚本时,我会将代码和注释高度堆积在一起(有时注释比代码更多)。我要说的很多人都说,即使这些脚本是个人的,我也应该记录这些脚本,以便如果我确实出售它们,我将做好准备。但是注释不是文档形式吗?

这不是吗:

$foo = "bar"; # this is a comment
print $foo; # this prints "bar"

被视为文档,特别是如果开发人员正在使用我的代码?还是认为文档不在代码本身之外?


11
如果您使用的是JavaDocs或Doxygen之类的文档生成系统,则注释实际上就是文档。
砸了机器人的时间2012年

5
YANGNI(xprogramming.com/Practices/PracNotNeed.html)。记录您的代码以使您满意。让客户(如果有的话)付钱给您,让他们满意地写文件。不必担心您会说很多人(除非他们付钱给您)。
2012年

1
在您的2条评论中,第二条无效,为什么不将$ foo替换为bar。如果不正确,则注释是错误的。第一条评论是错误的。这是一项任务。
ctrl-alt-delor 2012年

2
每当您想添加注释时,请将代码更改得如此清晰,以至于无需注释。一切都是文档,代码是文档,注释通常没有[附加]信息,或者是错误的。记录意图是什么(代码合同可以帮助您)以及原因。使文档靠近代码,并使用注释。文档上的文档:文档上的注释,注释上的清除代码。
ctrl-alt-delor 2012年

2
YANGNI是“您将不需要它吗”
Chris S

Answers:


27

注释绝对是文档。对于大多数项目,(不幸的是)注释是项目文档的主要(但不仅是)形式。因此,正确处理非常重要。您需要确保即使更改了代码,该文档仍然准确无误。这是带有注释的常见问题。开发人员在使用熟悉的代码工作时经常“调优”它们,因此他们忘记更新注释以反映代码。这可能会创建过时且令人误解的评论。

许多人建议使代码自记录。这意味着您可以对代码进行重组,以取代注释,而不需要注释。这可以消除大多数“什么”和“如何”注释,但是对于“为什么”注释并没有真正的帮助。尽管这可能有效地消除了大多数注释,但是仍然有很多时候编写注释是记录一段代码的最简单,最有效的方法。


3
“对于大多数项目,注释是项目文档的主要(如果不是唯一的)形式。” -试图为此投票,但不幸的是,必须承认这是一个真实的陈述。我希望您并不是要声明这是应该的方式。
爱德华·

2
我真的不同意这一点,因为您拥有的唯一可靠文档就是源代码本身。注释和“文档”都必须与代码一起维护,这种情况很少发生。因此,唯一可靠的文档来源就是您的代码!
martiert,2012年

3
@martiert我以前也有同样的感觉,但是我发现这在实践中并不十分有效。与试图从代码中提取“为什么”知识相比,所有这些“为什么”注释作为注释都更加清晰。当然,自文档代码可以(并且应该)用于删除大多数注释,但是有时注释是记录某些内容的最简单,最清晰,最省时的方法。
奥列克西(Oleksi)

3
@martiert自文档代码的问题在于它不允许引用其他地方的文档。我见过的一些代码中最好的注释是对学术论文的引用,这些论文解释了所用算法或魔术常数选择的细节。没有大量的自我文档记录将有助于避免某些关键文档只是显而易见的事实。“为什么”通常属于此类,有时“方法”也是如此。
Donal Fellows

3
还要注意,注释以多种语言用于生成实际文档...因此它们通常是相同的。以MSDN为例。
史蒂文·埃弗斯

12

它们是文档的一种形式,但是请记住,文档是情人眼中的……。

  • 对于某些人来说,自我记录代码就足够了。但这假设客户具有一定的技术细节。我们应该谨慎地认为这已经足够,因为我们的自我可能会告诉我们“很明显,这段代码在做什么”,但是时间可以证明是相反的。它还假定您已预先了解读者的技能。

  • 对于那些只看源代码但技术专业知识较少的人,可以使用注释。但这假设有人正在查看源代码。

  • 如果您是技术人员,但是缺乏阅读所有源代码的时间,则可能需要技术手册

  • 如果用户缺乏技术技能,但只需要知道发生了什么,则需要用户文档

因此,真正的问题是谁是您的客户?如果是这样,那么自我记录代码或注释就足够了。如果是给其他人的,您可能想扩展文档的方式。


17
自我记录代码是一个谎言。
扬尼斯2012年

1
@YannisRizos更像是一个无法实现的目标,而不是一个彻头彻尾的谎言。
帕萨里恩(Ftharien)的圣火,2012年

2
@YannisRizos:您可能是正确的,但是需要大量注释的代码几乎是非常糟糕的代码,并且几乎可以以需要较少注释的方式编写。
布朗

9
@DocBrown取决于。我见过有人为循环编写文档,也见过有人声称有100处业务逻辑是自我文档。事实是,过多的注释不会造成伤害(除非过时/不正确),并且如果我必须在过多的注释和自我记录代码之间进行选择,我将始终选择第一个。当然,就像Oleksi所描述的那样,我非常喜欢平衡的观点。
扬尼斯

1
@MathAttack大多数不错的IDE可以隐藏/折叠注释。但是,是的,有时它们只是挡住了路。
扬尼斯,2012年

3

是的,评论是一种文档形式。对于必须维护或更新您的代码的人来说,它们是否有用的文档尚待解决。

我知道您的意思只是举个例子,但是类似

print $foo; # this prints "bar"

没有用 它只会增加视觉混乱。不要记录明显的东西。

在方法或函数定义的开头的块注释,描述函数或方法的目的(高级术语),输入,输出,返回值(如果有的话),异常(如果有的话),前置条件和后置条件是有用的,但只能达到他们告诉某人应该如何使用该函数或方法的程度。他们没有解释功能为何存在。

如果其他人需要维护您的代码,则需要在某处记录需求和设计,而这通常不在源代码本身中完成。


3

我发现坚持使用“干净代码”中的Bob Martin的方法通常可以解决以下问题:您认为自己是在评论过多还是在评论不足,而忽略了文档:

我们是作者。关于作者的一件事是他们拥有读者。确实,作者有责任与读者保持良好的沟通。下次您编写一行代码时,请记住您是一位作者,是为会判断您的努力的读者写的。

...阅读与写作所花费的时间比例远超过10:1。作为编写新代码的一部分,我们不断阅读旧代码。

因此,换句话说,没有文档,您的代码是否可以自我解释?没有固定的规则(除非您为可公开访问文档的Microsoft之类的公司工作),很大程度上取决于帮助将来经常使用您的代码的读者。


2

文档应该记录为什么怎样。该如何应该是不言自明的代码,也就是除非是一些神秘的优化技巧或其他语言的特定技术,不常用存在的。

为什么可能不应该在代码中,它应该是别的地方像一个产品积压,这是依赖于犯了可以在更改日志或分支机构的名称来搜索故事IDS意见。


1
真正棘手的东西应该在学术论文中(或偶尔在专利中)。
Donal Fellows

2

注释是一种文档形式。劣等形式,建议您已找到可以更好地分解代码的区域。

听起来您像在强迫性地评论事物。有其他选择可能是一件好事。我可以想到三种高级的文档形式:

1)更好地分解代码。不用添加注释,而是提取名称为您要编写的注释文本的方法或函数。因此,代码说明了您要发表的评论。

2)测试。这是我通常会搜索出的文档形式。单元测试和验收测试是实时文档,如果使用很多有意义的方法来表达意图,则可以轻松阅读,如第1点所述。

3)对于脚本,--help选项。这是您可以修改文档的地方。坚持示例,预测用户的需求。

总之,如果您发现自己倾向于发表评论,请检查是否可以通过更好地构建代码来与读者交流。还是有一个测试来传达为什么存在该代码?如果您仍然想发表评论,请承认失败并这样做。

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.