下面的一些陈述是非常个人化的,尽管有一定道理,并且是这种方式。
评论类型
对于简短版本...我使用以下注释:
- 解释数据结构中字段的尾随注释(除那些之外,我并不真正使用单行注释)
- 块上方的特殊或针对性的多行注释
- 从源生成的公共用户和/或开发人员文档
请阅读下面的详细信息和(可能不清楚的)原因。
尾随评论
根据语言,使用单行注释还是多行注释。为什么要依赖?这只是一个标准化问题。在编写C代码时,默认情况下,我偏爱老式的ANSI C89代码,因此我更喜欢始终使用/* comments */
。
因此,在大多数情况下,我都会在C语言中使用它,有时(取决于代码库的样式)对于使用类似C语言的语法的语言而言:
typedef struct STRUCT_NAME {
int fieldA; /* aligned trailing comment */
int fieldBWithLongerName; /* aligned trailing comment */
} TYPE_NAME;
Emacs很不错,可以帮我做到M-;
。
如果该语言支持单行注释而不是基于C的语言,那么我会更热衷于使用单行注释。否则,恐怕我已经养成了习惯。这并不一定很糟糕,因为它迫使我变得简洁。
多行注释
我不同意您使用单行注释的说法,因为这在视觉上更具吸引力。我用这个:
/*
* this is a multi-line comment, which needs to be used
* for explanations, and preferably be OUTSIDE the a
* function's or class' and provide information to developers
* that would not belong to a generated API documentation.
*/
或这个(但我不再那么频繁了,除了在个人代码库上或者主要是为了获得版权声明-这对我来说是历史性的,来自我的教育背景。不幸的是,大多数IDE在使用自动格式化时会搞砸了):
/*
** this is another multi-line comment, which needs to be used
** for explanations, and preferably be OUTSIDE the a
** function's or class' and provide information to developers
** that would not belong to a generated API documentation.
*/
如果确实需要,那么如果可以在尾随位置使用它,则可以使用前面提到的尾随注释来内联注释。例如,在非常特殊的返回情况下,或者记录switch
的case
语句(很少见,我不经常使用switch),或者在if ... else
控制流中记录分支时。如果这不是其中之一,通常对作用域之外的注释块概述函数/方法/块的步骤对我来说更有意义。
我非常例外地使用它们,除非使用不支持文档注释的语言进行编码(请参见下文);在这种情况下,它们变得更加普遍。但是在一般情况下,它实际上仅是为了记录那些对其他开发人员有意义的事情,并且是真正需要脱颖而出的内部注释。例如,要记录一个强制性的空块(如“强制” catch
块):
try {
/* you'd have real code here, not this comment */
} catch (AwaitedException e) {
/*
* Nothing to do here. We default to a previously set value.
*/
}
这对我来说已经很丑陋,但在某些情况下我会容忍。
文档注释
Javadoc等
我通常在方法和类上使用它们,以记录引入功能(或更改功能)的版本(尤其是在公共API专用的情况下),并提供一些示例(明确的输入和输出用例以及特殊用例)。尽管在某些情况下用单位案例来记录它们可能更好,但是单位测试不一定是人类可读的(无论您使用什么DSL东西)。
他们使我有点烦恼文档字段/属性,因为我更喜欢尾随注释,而并非所有文档生成框架都支持尾随文档注释。例如,Doxygen可以,但是JavaDoc则不可以,这意味着您需要为所有字段添加最上面的注释。不过,我可以幸免于难,因为在大多数情况下,Java行总是相对较长,因此通过将行扩展到超出我的容忍阈值,尾随注释将使我同样地感到毛骨悚然。如果Javadoc会考虑改善这一点,我会很高兴。
注释掉的代码
我仅出于一种原因使用单行代码(类似于C语言)(除非针对严格的C进行编译,否则我实际上不使用它们):在编码时将内容注释掉。大多数IDE都具有单行注释切换功能(按缩进或第0列对齐),并且适合我的用例。使用多行注释切换(对于某些IDE,在行中间进行选择)将使在注释/取消注释之间轻松切换变得更加困难。
但是由于我反对SCM中的注释掉的代码,因此通常寿命很短,因为我将在提交之前删除注释掉的块。(请阅读我对“在线注释和SCM编辑”中该问题的回答)
评论样式
我通常倾向于写:
- 用于文档注释的具有正确语法(包括标点符号)的完整句子,因为它们应该稍后在API文档中阅读,甚至可以作为生成的手册的一部分阅读。
- 格式正确,但对多行注释块的标点/大写比较宽松
- 尾随的块而没有标点符号(由于篇幅所致,通常是因为注释是简短的注释,其读起来更像是带括号的语句)
关于文字编程的注意事项
正如Donald Knuth在本文中介绍的那样,您可能想对Literate Programming感兴趣。
熟练的编程范例代表了一种从计算机强加的方式和顺序编写程序的转变,而使程序员能够按照其逻辑和思想流所要求的顺序来开发程序。2精巧的程序是用普通的人类语言作为对逻辑的不间断的阐述而编写的,就像论文的文本一样。
精巧的编程工具用于从有文化的源文件中获得两种表示形式:一种适用于计算机的进一步编译或执行,“纠结”的代码,另一种适用于查看格式化的文档,据称是从文档中“编织”来的。识字的来源。
作为旁注和示例:尽管未遵守我的评论风格,underscore.js JavaScript框架还是一个文档良好的代码库和格式正确的带注释的源代码的很好的示例-尽管可能不是最好的用法API参考)。
这些是个人惯例。是的,我可能很奇怪(您也可能如此)。没关系,只要您在与同龄人一起工作时遵循并遵守团队的代码约定,或者不从根本上攻击他们的喜好并与他们同居。这是您风格的一部分,您应该找到一条明确的界线,即发展一种将您定义为编码员(或与您有联系的思想流派或组织的追随者)的编码风格,并遵守团体的一致性约定。。
:3,7 Align //
在3-7行对齐。