为什么'//'样式的多行注释不好(在Java中)?

2022-09-02 00:19:36

http://java.sun.com/docs/codeconv/html/CodeConventions.doc4.html#286

我正在阅读Java编码约定的上述部分,并开始想知道为什么它说“//注释.....不应在文本注释的连续多行上使用”

为方便起见,请将相关部分复制粘贴到此处:

注释分隔符可以注释掉整行或仅注释掉部分行。它不应该用于文本注释的连续多行;但是,它可以在连续的多行中用于注释掉代码段。

这有什么合理的理由吗?


答案 1

实际上,我已经使用多条生产线多年了,从来没有遇到过任何严重的问题。我不再是它的忠实粉丝,因为你会得到:///*...*/

/* I'm commenting out all this code for a moment
  ...
  /* And here is a multi line comment
     that was hidden in the middle */
  ...
*/ 

感谢编译器,它感到不安并告诉我问题。

其中:

...
// And here is a multi line comment
// that was hidden in the middle
...

变为单个宏:

// ...
// // And here is a multi line comment
// // that was hidden in the middle
// ...

并愉快地反转另一个宏,将其返回到原始形式

至于:

  // but now you have 
  // trouble edditing
  // your comments so
  // that every  line
  // is of equal size

我说:

  // Tough, this is a piece of code not a 
  // published novel
  // and if varying lengths
  // make
  // it hard for you to read then heaven
  // forbid how you handle the code

你不是讨厌edditing吗:

/******************************************************************
 * Program: Foo.java                                              *
 ******************************************************************
 * Author:  Codey Art Work                                        *
 * Purpose: To do something with something and get something not  *
 *          forgetting something else.                            *
 ******************************************************************
 * Revision History:                                              *
 ******************************************************************
 *  Date  | Author |                                              *
 *--------|--------|----------------------------------------------*
 * 1/2/09 | Jack   | Now I have to keep all my comments in this   * 
 *        |        | tiny little space and if I edit it I just go *
 *        |        | aaarrrrrrggggggggggghhhhhhhhhhh!!!!!!!!!!!!! *
 ******************************************************************/

这似乎总是出现在坚持超过的地方/* *///

我只想对Stack Overflow的家伙们说,这真的很酷的编辑器。执行代码示例非常简单。


答案 2

这个想法是,多行文本注释是一个实体 - 您希望在逻辑上将其保持在一起。此类注释中的换行符只不过是换行文本的位置,因此将其分解为许多“单独”的注释是没有意义的。因此,您可以围绕整个事物构造一个注释块 - 使用 /* */。

对于注释掉代码,每行都是它自己的逻辑单元,所以使用连续的“//”s是可以的 - 有时。如果由于某种原因可以将单个行注释回“in”,但并非所有行,则尤其如此。虽然如果你想注释掉整个块代码,而部分注释它进入/退出是没有意义的,你可能仍然更喜欢使用/* */ - 再次在逻辑上和视觉上将所有内容组合在一起。