【问题标题】:Should I use less local variables or bet on conciseness? [closed]我应该使用更少的局部变量还是下注简洁? [关闭]
【发布时间】:2013-10-08 16:34:25
【问题描述】:

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

我应该更喜欢这个吗:

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

ClassGlobal.execute(firstString, secondString);

或者这个;

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

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

【问题讨论】:

  • 这在很大程度上是风格问题。我的一般方法是仅在我要多次使用它时创建一个局部变量,或者如果我用来分配它的构造非常冗长并且如果用来代替变量会看起来很丑陋。就性能而言,如果编译器不决定内联许多赋值,我不会感到惊讶。
  • 我更喜欢代码尽可能简单明了。你觉得哪个更简单、更清晰?命名变量是否会告诉您一些您无法从方法名称中解决的问题?
  • (我最关心的是那里的全局变量。)
  • 我会注意到,答案提供了几乎相同的说明性建议,可以编辑成一个单一的、可接受的然后关闭的答案......
  • 第二个,因为堆栈中的指针会更少。

标签: java coding-style


【解决方案1】:

如有疑问,请记住 Coding Horror 的这句话:

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

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

【讨论】:

  • 支持引用 Jeff。
  • 哇!这是我得到的答案最多的赞成票。我从来没有意识到杰夫的名言对可信度和赞成票的影响。仅仅提及他的名字就可以吸引人们为帖子点赞
  • 这是一句特别能引起共鸣的名言。
【解决方案2】:

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

【讨论】:

  • 还有其他一切!可读性永远是第一位的。
  • @TFNelson 除非没有发生,否则确实会发生。
  • @Dave Newton 啊,自然。除例外情况外,所有规则均无例外地遵守。
【解决方案3】:

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

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

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

【讨论】:

    【解决方案4】:

    如果您可以通过为局部变量分配一个好名称来创建更有意义的代码,然后创建额外的局部变量(如果您可能需要交互式调试...也很有用...)。

    如果本地人不会添加意义,因为被调用的方法名称非常好,并且您具有非常可靠的单元测试能力,而不是调试和断点.... 使用紧凑表示法会感觉更好。但更多时候我倾向于创造当地人。

    【讨论】:

      【解决方案5】:

      我会选择第一个。它增加了可读性。对于第二个,它肯定会减少一些分配操作(!),但在大多数情况下,这是非常微不足道的性能改进量。所以更严格的可读性

      另外,你不应该关心过早的优化。而且,现在的编译器会为你做这些优化。

      【讨论】:

      • 并且可能由编译器在发布版本中优化...
      • yup .. 编译器也会为你做这个优化
      【解决方案6】:

      可读性是最重要的。如果代码可读性不好,请尝试在 1 年内阅读您的代码,您会得到答案。

      【讨论】:

        猜你喜欢
        • 2020-09-11
        • 2017-12-30
        • 2020-10-05
        • 2010-10-21
        • 2010-10-31
        • 1970-01-01
        • 1970-01-01
        • 2012-06-20
        • 2013-05-23
        相关资源
        最近更新 更多