在考虑是否在代码段中添加注释时,我想问自己一个问题:我可以传达些什么,这可以帮助下一个人更好地理解代码的整体意图,以便他们可以更新,修复或更快,更可靠地扩展它?
有时,对于这个问题的正确答案是,在代码中没有什么可以添加的,因为您已经选择了使意图尽可能明显的名称和约定。这意味着您已经编写了可靠的自文档代码,并且在其中插入评论可能会减损您的工作。(请注意,冗余注释实际上会随着时间的流逝而减慢与真实代码的不同步,从而实际上会破坏代码的可靠性,从而使解读真实意图变得更加困难。
但是,在几乎所有程序和任何编程语言中,您都会遇到这样的问题,即原始程序员(由您自己)做出的某些关键概念和决定在代码中将不再明显。这几乎是不可避免的,因为优秀的程序员总是为将来编程—即,不仅要使程序一次运行,而且要使其所有许多将来的修复程序,版本,扩展和修改以及端口,以及谁知道该怎么做。也可以正常工作。后一组目标要困难得多,并且需要更多的思考才能做好。这也是很难在大多数计算机语言,它更注重功能性,以良好表达-也就是在说什么做此 为了使它令人满意,现在需要执行该程序的版本。
这是我的意思的简单示例。在大多数语言中,快速内联搜索小数据结构将具有足够的复杂性,以至于初次查看它的人可能不会立即识别出它是什么。这是一个很好的评论的机会,因为您可以添加一些有关代码意图的内容,以后的读者可能会立即发现它们对解密细节很有帮助。
相反,在诸如基于逻辑的语言Prolog之类的语言中,表达对一个小列表的搜索可能是如此的琐碎和简洁,以至于您可能添加的任何评论都只会是杂乱无章。因此,良好的评论必然取决于上下文。其中包括因素,例如您使用的语言的优势以及整个程序的上下文。
底线是:思考未来。问问自己,关于将来如何理解和修改程序,什么对您来说重要和显而易见。[1]
对于您的代码中那些真正可以自我记录的部分,注释只会增加噪音,并增加将来版本的一致性问题。因此,不要在此处添加它们。
但是对于您从几个选项中做出关键决定或代码本身过于复杂以至于其目的难以理解的那些部分,请以注释的形式添加您的特殊知识。在这种情况下,一个很好的评论是使将来的程序员知道必须保持相同的东西(顺便说一句,就是不变断言的概念)以及什么可以更改。
[1]不仅限于注释问题,还值得提出:如果您对将来的代码更改有非常清晰的认识,那么您可能应该考虑的不仅仅是注释并嵌入这些参数在代码本身中,因为与尝试使用注释将某些未知的未来人引向正确的方向相比,这几乎总是一种更可靠的方式来确保代码的未来版本的可靠性。同时,您还希望避免过于笼统,因为众所周知,人类不擅长预测未来,其中包括程序更改的未来。因此,请尝试在程序设计的各个级别上定义和捕获合理且经过充分验证的未来维度,但不要