【问题标题】:Java comment at end of brace/block大括号/块末尾的 Java 注释
【发布时间】:2012-09-29 07:31:49
【问题描述】:

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

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)

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

【问题讨论】:

  • 等到你有几个内部块,由 10 甚至 100 行分隔......然后它会有所帮助。想想如果你在循环中有一些其他的if 语句会是什么样子......
  • 如果你在一个块中有 100 行,你可能应该考虑从那里拉出一个方法,让一切变得更简单。
  • 当我这样做时,我会稍微增加信息,例如} // end for i以将其与嵌套的} // end for j区分开来
  • 如果你的代码太混乱以至于让你觉得你应该重新引入 oldskool if-endif 语法,那么你应该让你的代码不那么混乱。 :)
  • 我认为 Linus Torvalds 说过“如果你的代码有超过三个级别的缩进,那么它就不是一段好的代码”。也就是说,代码块末尾的 cmets 可能表明您的代码过于复杂......保持简单,它将帮助您(以及阅读您的代码的人)玩得开心

标签: java comments curly-braces


【解决方案1】:

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

这不是一个好习惯,因为

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

【讨论】:

  • @LordScree: 甚至是推论:“4. 它不会被维护,信息通常会与现实不同步”
  • eclipse,例如,如果您将鼠标光标放在右括号上,则会显示块的信息。
【解决方案2】:

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

此外,这违反了风格指南和"self-documenting code" 的原则。您永远不应该有那么多括号或一个足够长的方法来让读者对括号的位置感到困惑,而是将该功能封装在另一种有据可查的方法中。

括号表示循环或复杂的 if-else 逻辑链,良好的编程习惯是让一个方法只做一件事并做好,然后从这些更小的、原子化的方法构建您的程序。我会读巴特勒兰普森的开创性作品"Hints for Computer System Design"。它详细介绍了如何设计好的软件。

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

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

【讨论】:

    【解决方案3】:

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

    看起来像这样的东西:

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

    然后添加一些 cmets 会有所帮助:

    // ... 文件。关闭(); } } } }//for: 每个文件 } }

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            猜你喜欢
            • 2013-10-15
            • 2016-10-03
            • 2015-12-12
            • 1970-01-01
            • 2014-10-23
            • 2011-10-15
            • 1970-01-01
            • 2020-08-17
            • 2018-11-07
            相关资源
            最近更新 更多