33

在 Java 编程语言中,用一个注释来结束一个代码块的大括号是否是一种公认​​的做法,该注释简要解释了大括号关闭了哪些代码块?我个人认为它们是无用的注释,会扰乱代码的可读性,但也许我错了。例如:

public void myMethod(int foo) {    
    // some code
    if (foo == 2) {
        for (int i = 0; i < myMax; i++) {
            while (true) {
                // some more code
            } // end while
        } // end for
    } // end if
} // end myMethod(int)

以类似方式注释代码块的做法是否被接受?

4

6 回答 6

58

我的看法是,通常这不是一个好习惯。与往常一样,规则可能会有例外,但非常罕见。

这不是一个好习惯,因为

  1. 当您将光标放在右括号上时,现代编辑器会突出显示左括号,反之亦然。
  2. 最重要的是:如果有可能看不到子句的开头,则意味着该方法很大(超过半页),这是一种不好的做法。
  3. 它给代码增加了噪音,会使习惯于更传统 Java 编码风格的读者感到困惑。
  4. 纳入 LordScree-Joachim Sauer 评论:这些评论将难以维持。所以很可能它不会被维护,并且信息通常会与现实不同步。
于 2012-10-09T02:33:50.007 回答
37

这并不是一个坏习惯,但它是糟糕的面向对象编码实践的致命副作用!

此外,这违反了样式指南和“自记录代码”的原则。您永远不应该有那么多括号或一个足够长的方法来让读者对括号放置感到困惑,而是将该功能封装在另一种有据可查的方法中。

括号表示循环或复杂的 if-else 逻辑链,良好的编程习惯是让一个方法只做一件事并做好,然后从这些更小的原子化方法构建您的程序。我会阅读 Butler Lampson 的开创性作品“计算机系统设计提示”。它详细介绍了如何设计好的软件。

所以本质上,不要这样评论,因为:

  1. 它违反了风格准则
  2. 它显示了糟糕的面向对象编程——原子化你的功能!
  3. 这是编码实践的致命副作用,它违背了创建 Java 的基本概念 - 封装,特别是信息隐藏
  4. 它违反了自记录代码的概念
  5. 其他程序员会取笑你。
于 2012-10-09T03:46:19.517 回答
2

我只在代码中有一个位置有很多相互连接的右大括号时才这样做。但不是每个支架。主要是我似乎将它用于循环,以便您可以轻松查看什么是重复的代码块。

看起来像这样的东西:

            // ...
            文件。关闭();
          }
        }
      }
    }
  }
}

然后它有助于添加一些评论:

            // ...
            文件。关闭();
          }
        }
      }
    }//for: 每个文件
  }
}
于 2013-11-21T07:31:45.737 回答
1

这取决于方法或功能的复杂程度。就像如果你有一些可以很容易阅读和理解的东西,那么在每一行结束时都用解释该部分已经结束的注释来结束真的没有意义。这就是缩进和换行符的用途。但是,如果您有一些真正复杂的东西并且影响了代码的主要部分,那么您应该指出该代码的结束位置以及该部分的作用。

于 2012-10-09T02:31:06.747 回答
0

如果有相同类型的嵌套块,它可能会令人困惑而不是做得很好。假设您有 4 或 5 个嵌套的 if 语句(请记住,这只是一个演示情况的示例,无论“哦,您应该将它们分开”或“制定方法”建议)在这种情况下,您将有 4 或 5 个不同//如果已排序则结束。过了一会儿,它会让你混淆哪个“end if”是哪个语句,让你无意识地花费额外的精力来查看实际的代码/语句,因为它并不总是像你的示例那样干净/简短。

于 2012-10-09T02:54:15.070 回答
0

IMO,它没有多大帮助。循环或 if 语句中的代码不应太大。如果循环中有 500 行,那会有所帮助。

于 2012-10-09T03:04:37.627 回答