对于代码文档,通常认为代码应该自己解释,并且内联代码文档(不包括公共API文档)应该只解释元代码问题,例如变通方法,解释选择具体实施的原因等等。
如何让您的代码更具可读性,更多解释自己?
<小时/> 编辑除了一般性评论之外,我还在寻找具体提示。因此,如果您说“短而有意义的变量名称”,那么也可以获得有用的提示(例如“使用三字原则”)。
答案 0 :(得分:28)
查看Jeff Atwood的Code Smells博文。它几乎总结了它。在谈到良好的可读代码时,我将添加我的个人精神:
/* finished */
评论之前{{} 1}}。说真的,重点是什么?大多数(好的)代码解释了自己; 答案 1 :(得分:8)
答案 2 :(得分:8)
使用好的变量和方法名称。将代码分解为有意义的部分,以实现特定目的。让你的类具有凝聚力(它们一起工作)和解耦(类之间几乎没有依赖关系)。不要重复自己(干)。跟随鲍勃叔叔的SOLID principles(不是法律,正如他points out),他们努力使代码更好。
答案 3 :(得分:5)
来自'uncle bob'的书清洁代码通过实际操作示例为您提供了关于功能应该如何的完整概述。
一些要点:
这本书有很多小规则,我真的推荐它。也可以获得Code Complete 2。
答案 4 :(得分:4)
自我记录代码是:
但请记住,即使是最自我记录的代码也只能记录那里的内容;从来没有故意遗漏,优化,尝试和丢弃等等。基本上,你的源文件中总是需要英语,或者你必须遗漏重要的警告和设计决定。
答案 5 :(得分:4)
我通常不会在代码内部发表评论,但是我完全不同意经常持有的观点,即应该只编写可读代码,然后就不需要文档了。
我认为应该记录您的界面。我的意思是应该有关于类和方法的注释。当然不是像set和get这样简单的方法。
使用您编写的类和方法的人不应该阅读您的代码以了解如何使用它们。所以我认为应该记录合法的输入和输出范围以及重要的不变量。例如。函数将指针作为参数。无论你如何命名你的函数,提供NULL是否有效或NULL是否是有效的返回结果永远不会是显而易见的。通常-1和0用于表示搜索未找到或类似的对象。这应该记录在案。
除此之外,我认为关于记录代码的关键不是要记录 做什么或 的类或方法,而是 意图 背后是。
答案 6 :(得分:2)
您和同事之间有一个Coding Convention。从缩进开始,覆盖括号,直到“花括号来到哪里:新行,同一行?”
在Visual Studio中,可以选择并修复此样式。它可以帮助团队中的所有其他人阅读相同的代码。当您不必区分“空”编辑(样式更改)和实际编辑时,它还可以使版本系统中的历史记录跟踪变得更加容易。
答案 7 :(得分:1)
坚持使用您正在编码的环境中使用的范例。
一个明显的例子是在.NET中使用Pascal case作为方法,在Java中使用camel case。
不太明显的例子涉及使用与标准类库中使用的约定相同的约定。
这个目标还有很多要说的。命名约定为人类传达了大量信息,而编译器则很少。任何在一个使用其他环境约定的环境中使用API的人都已经注意到了外来代码的突出程度。
一致性是一种有价值的特征,可以降低人类代码消费者的认知负担。
答案 8 :(得分:1)
Eschew codejunk。
Edward Tufte拥有chartjunk这个美丽而强大的概念,图表中的视觉元素会产生噪音而不是信息。通过这种方式思考图表,我们可以制作更清晰的图表。
我认为应用于代码的相同思维方式为我们带来了更清晰的代码。示例包括/* getFoo() gets the foo */
式注释,不必要的括号和大括号,过度特定的变量名称以及匈牙利符号疣。
Chartjunk的构成取决于团队,环境和项目 - 有些人喜欢疣;某些环境以呈现某些垃圾的方式呈现代码(例如,考虑大括号匹配和// end for
注释);有些项目需要更广泛的评论才能符合标准或全面记录API。但是当一个团队已经建立了图表清单对其项目意味着什么的标准时,许多决策变得更容易,并且其代码变得更加一致和更具可读性。
答案 9 :(得分:0)
所有回复(和问题)均基于可读性完全由代码编写者负责的假设。如果你真的不想阅读代码并且你现在有一个放弃阅读列表(代码闻起来),它匹配99%的可用代码,你实际上并不想要考虑一些代码正在做什么,那么你就不会找到任何可读的代码。
无论我们今天使用什么规则来使我们的代码更具可读性,都将在10年后看起来过时而且愚蠢。如果您真的想要更好的代码可读性,请阅读一些旧代码(允许时间的流行,它必须在具有1000倍速度和内存的机器上运行),努力理解它并鼓励其他人做同样的事。