Java 我应该使用更少的局部变量还是押注于简洁性?

Java 我应该使用更少的局部变量还是押注于简洁性?,java,coding-style,Java,Coding Style,我最近在考虑使用局部变量,例如: 我应该更喜欢这个: String firstString = classString.getFirstString(); String secondString = classString.getSecondString(); ClassGlobal.execute(firstString, secondString); 或者这个, ClassGlobal.execute(classString.getFirstString(), classString.g

我最近在考虑使用局部变量,例如:

我应该更喜欢这个:

String firstString = classString.getFirstString();
String secondString = classString.getSecondString();

ClassGlobal.execute(firstString, secondString);
或者这个,

ClassGlobal.execute(classString.getFirstString(), classString.getSecondString());

我个人更喜欢后者,因为它更简洁,不需要两个额外的实例变量。但这是一件好事吗?我是否为了简洁而牺牲了代码的可读性?或者使用任何一种都可以吗

对于我来说,您应该优先考虑代码可读性,而不是最小化变量的数量。您可能完全理解这一行代码,但对于将来重新编写代码的任何程序员来说,他都会喜欢使用局部变量(如果您使用良好的“自定义”名称,甚至会更好)。

在这种特定情况下,这并不重要。如果行本身是可读的,则无需分离变量。然而,一旦你开始添加比getter更多的逻辑,我会倾向于将它们分开。考虑下面的代码:

ClassGlobal.execute(classString.getFirstString().toLowerCase().substring(0, 10),
   classString.getSecondString().toLowerCase().substring(0, 10));

如果您将firstString和secondString分开并为它们指定有意义的名称,这一行会更好。与代码中的大多数内容一样,没有“最佳”方法。我倾向于在可读性方面出错。

我会选择第一个。它增加了可读性。对于第二种情况,它实际上减少了一些赋值操作(!),但在大多数情况下,这对性能的改善是微不足道的。所以最好严格要求可读性


另外,您不应该关心过早的优化。此外,现在的编译器会为您进行此类优化。

如果您可以通过为局部变量指定一个好的名称来创建更有意义的读取代码,那么就创建额外的局部变量(如果您可能需要以交互方式调试,那么也很有用…)


如果局部变量不会增加意义,因为所调用的方法的名称非常好,并且您具有非常强大的单元测试能力,而不是调试和断点。。。。使用紧凑的表示法会感觉更好。但我往往倾向于创造当地人。

当我有疑问时,请记住以下这句话:

始终像最终维护您的代码的人是 知道你住在哪里的暴力精神病患者


这句话的意思是“让代码尽可能容易理解和阅读。”以后,如果你需要在5年后再次维护该程序,那么如果你让它尽可能可读,对你自己来说会更容易。这对每个人来说都是双赢的。

可读性是最重要的。如果你的代码读起来不好,试着在一年内阅读它,你会得到答案。

还有其他任何东西!可读性总是第一位的。@TFNelson,除非它没有,这确实发生了。@Dave Newton啊,很自然。除异常外,所有规则都将毫无例外地遵循。并且可能由编译器在发布版本中进行优化…是的。。编译器也会为您进行这种优化。这在很大程度上是一个风格问题。我的一般方法是,如果我要多次使用局部变量,或者如果我用来分配它的构造非常冗长,并且如果用它代替变量,看起来会很难看,那么只创建一个局部变量。就性能而言,如果编译器不决定内联许多赋值,我不会感到惊讶。我希望代码尽可能简单明了。你认为哪一个更简单更清晰?命名变量会告诉你一些你不能从方法名中得出的东西吗?(我最关心的是全局变量)。我会注意到,答案提供了几乎相同的规定性建议,可以编辑成一个单一的、可接受的、然后接近的答案…第二个,因为在stack.upvote中引用Jeff的指针会更少。哇!这是我在回答问题时得到的最多的选票。我从未意识到杰夫的名言对可信度和选票的影响力。仅仅提到他的名字就吸引了人们对这篇帖子投上更高的票。这是一句特别响亮的名言。