Space between line-comment character(s) and start of actual comment
我认识到,这条规则可能不同于一家公司的编码标准,但一般来说,哪一个是首选的?
行注释后有空格:
1 2 3 | int foo = Bar(quux + 1); // compensate for quux being off by 1 foo = Bar(quux + 1) # compensate for quux being off by 1 |
行注释后没有空格:
1 2 3 | int foo = Bar(quux + 1); //compensate for quux being off by 1 foo = Bar(quux + 1) #compensate for quux being off by 1 |
我在网上找不到任何关于这种编码风格方面的信息。我的猜测是,包括一个空间是所有语言的首选样式,但我希望一些"确凿的证据"来证实或否认这一点。
到目前为止,似乎每个人都有轶事证据表明使用空间是首选。有人能指出我的方向,一些官方或其他出版的编码标准,直接解决问题的意见格式和是否应该使用一个空间?
我已经用多种语言开发了大约10年的大型和小型项目软件。我还没有看到有人故意不使用空间。在事物的图式中,它实际上没有那么重要(毕竟,我们都知道这些是注释,并且可以阅读它们),但是我认为无空间版本看起来类似于注释掉的代码,需要额外的毫秒的脑能量来确认它是注释:—)
python的官方风格指南pep 8对此问题非常清楚:
Each line of a block
comment starts with a # and a single space (unless it is indented
text
inside the comment).
还有:
Inline
comments should be separated by at least two spaces from the statement.
They should start with a # and a single space.
这证实了每个人的轶事证据,但我认为这是根据要求引用"一些官方或其他出版的编码标准"的第一个答案;-)。
在过去的24年中,我在C、C++、Pascal、Basic、Java、Perl、Object C、Bernshell、BASH、CSH、TCSH和C68、PowerPC和X86等组件中开发和维护代码。在这段时间里,我注意到一些事情…
带前导空格的注释比不带空格的注释至少常见1000倍。注释中缺少前导空格通常是由于草率的输入导致的打字错误。
我不记得在没有空格的专业书籍或手册中看到过示例代码中的注释。
我认识的唯一一个经常在评论中省略前导空格的专业开发人员,是在使用一个不使用空格的非西方表意文字系统的情况下长大的。
我从来没有,从来没有见过一个官方的公司编码风格,告诉人们在评论中忽略了领先的空间。
总之,我要说的是,压倒性的证据是,一行评论后的空格是首选。
我刚刚遇到了Stylecop的SA1005规则,其中规定:
A violation of this rule occurs when a
single-line comment does not begin
with a single space. For example:
1
2
3
4
5 private void Method1()
{
//A single-line comment.
// A single-line comment.
}The comments should begin with a single space after the leading forward slashes:
1
2
3
4
5 private void Method1()
{
// A single-line comment.
// A single-line comment.
}
因为StyleCop在某种程度上是微软的产品,所以我认为这可以作为一个官方的编码标准来处理行注释中的空格。
我已经找到了标准(根据维基百科)在Java中评论。这应该是"符合Sun Microsystems JavaDoc标准"的:
1
2
3
4
5
6 /**
* Registers the text to display in a tool tip. The text
* displays when the cursor lingers over the component.
* @param text the string to display. If the text is null,
* the tool tip is turned off for this component.
*/
所以我开始认为标准是一个空间。另外,所有其他示例都有一个空格。
我尽量避免在一行代码的末尾有注释,因为这样注释就挂在末尾,扫描时就不容易解析了。不过,当我有充分的理由时,我喜欢使用两个空格来分隔代码和注释(然后在注释标记后使用一个空格)。它只是让眼睛更容易…
考虑:
1 | int top; // Index of the top of the stack. |
对比:
1 | int top; // Index of the top of the stack. |
从主观上看,两个空格似乎只会让区分代码和非代码变得更容易。
谷歌Java样式指南格式化部分需要在注释的两侧放置一个空间:
4.6.2 Horizontal whitespace
Beyond where required by the language or other style rules, and apart from literals, comments and Javadoc, a single ASCII space also appears in the following places only.
...
On both sides of the double slash ( // ) that begins an end-of-line comment. Here, multiple spaces are allowed, but not required.
谷歌C++风格指南需要两个空间http://GITHUB.COM/谷歌/StultGue/BLUB/GH页面/CPPLITN/CPPLIT.PY-L3014。即