【问题标题】:Java coding style 2019 [closed]Java 编码风格 2019 [关闭]
【发布时间】:2019-10-12 16:16:19
【问题描述】:

我很想知道java当前的编码风格。我的团队强制将 {} 用于一个班轮 if 语句。虽然我们曾经为一个衬里使用大括号,但当前的 java 源代码不再为一个衬里使用大括号 if 语句,我自己也倾向于这样做。

Python 完全放弃了大括号。

但是我在 2019 年没有看到任何特定的风格指南。o​​racle 文档仍然指的是 1997 年的编码风格。

什么是正确的编码,还是与开发人员的偏好有关?

   foo();

   if (condition)
      doSomething();

   bar();

   foo();

   if (condition) {
      doSomething();
   }

   bar();

编辑 1:正如 Kartik 提到的,我们也可以这样写一个衬里:

   if (condition) doSomething();

对我来说,这是开发人员的偏好,我对这两种方法都满意,但在我目前的团队中,一些开发人员认为不使用大括号是一种糟糕的编码实践。看了java源码,发现很多地方大括号都省略了。所以,我不相信这是真的。至于谷歌编码风格,它也存在多年,很多人继续使用。但是对于新代码有没有新的指导方针?

编辑 2:此问题被标记为基于意见并被搁置

我想澄清一下,我不是在寻找意见。我更多的是寻找 Oracle(或 Java 开源社区)截至今天(2019 年)可能就最佳实践提出的标准指南。大多数 java/google 的做法都可以追溯到 1996 年,现在可能已经不适用了。即使在一些新书中有一些参考,有些人可以分享这些细节,也会很有帮助

【问题讨论】:

  • 如果您不使用大括号,请确保将整个内容写在一行中,例如 if (condition) doSomething();
  • 我对第一种风格的个人问题是,前面if 的闭包不是那么明确。所以,我更喜欢总是使用花括号。如果官方观点会随着 Java 的最新版本而改变(假设有),我会感到惊讶。
  • 总是添加大括号背后的想法是我可以添加一些代码而无需查看是否需要添加大括号。
  • 我从未见过要求每个循环体和 if/else 体都使用大括号的编码标准。其背后的原因是维护开发人员会添加行而忘记添加大括号。这是一个真正的问题,导致了许多真正的错误。此外,添加大括号没有任何成本——它丝毫不会损害可读性。
  • @VGR 那为什么java源代码不一样呢?

标签: java if-statement formatting code-formatting


【解决方案1】:

我认为 java 常用的样式指南之一是来自 Google 的,请参阅here

上面写着:

大括号与 if、else、for、do 和 while 语句一起使用,即使主体为空或仅包含单个语句。

但这里真正的一般 答案是:只使用诸如提示 之类的输入来做什么。对你来说:和你的同龄人坐下来,看看你喜欢什么,然后把它写下来,然后去做。喜欢:我们的团队决定使用 google 风格,但在这里或那里对其进行细微的更改。

然后确保您的工具支持您喜欢的样式。我们选择“google 风格”的原因之一是您可以获得 eclipse、IntelliJ 甚至 SlickEdit 的格式模板。

我同意 Java8(和更新的)元素没有“突出”的样式指南,例如冗长的流语句。这就是“与你的团队一起决定你想要什么”再次出现的地方。例如,我们决定

stream()
  .filter(...)
  .whatver

每个都在自己的行上(其中一个原因是 IntelliJ 会在编辑时为您提供每行的返回类型,这在处理流时非常有用)。

【讨论】:

  • 我同意。本风格指南是 Google 的意见;我们应该改变什么最适合我们。我喜欢 IntelliJ 的四个空格缩进,而不是 Google 的两个空格缩进,所以我使用它。
  • @Kartik 这就是我们所做的,从 2 到 4。只是想知道:你认为这里缺少什么来获得值得投票的答案吗?
  • google 指南也存在多年,但在 java 8 之后编写 java 代码的风格发生了巨大变化。遵循 google 代码风格的人可以继续这样做,但对于新代码我觉得这更像是一种偏好
  • @SubhomoySikdar 查看我上次的编辑
【解决方案2】:

随心所欲地写。我更喜欢括号。 他们帮助浏览代码。

【讨论】:

  • 这是评论,不是答案。
猜你喜欢
  • 1970-01-01
  • 2015-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多