【问题标题】:Best practice for variable saving可变储蓄的最佳实践
【发布时间】:2017-12-23 01:52:33
【问题描述】:

有两个code code 1:

if(isApplicable() || isGood()) {
   //something
}

private boolean isApplicable() {
}

private boolean isGood() {
}

代码 2:

boolean applicable = isApplicable();
boolean good = isGood();

if(applicable || good) {
   //something
}

private boolean isApplicable() {
}

private boolean isGood() {
}

哪种方法是好的 java 实践? 对我来说,代码 1 接缝更干净,代码 2 接缝有额外的代码。 code2可以让远程调试变得简单。

【问题讨论】:

  • 短:第一个。如果您不打算在其他任何地方使用该变量,请不要一开始就创建它。这个问题也有一个完全相同的副本,只是在atm找不到它。
  • 更少的代码意味着更少的错误空间。
  • 第一,练习让代码简短。更容易进行调试。
  • 第一个。但这仍然是一种意见。
  • 如果方法调用多次,最好选择第二个选项,否则第一个选项很好

标签: java


【解决方案1】:

为了概括你的问题,你问的是两种形式:

// local variable form
Foo foo = methodReturningFoo();
Bar bar = methodTakingFoo(foo);

// inlined form
Bar bar = methodTakingFoo(methodReturningFoo());

大多数现代 IDE 都有一个快捷键,可以通过按键在它们之间进行重构:“inline”“extract local variable”。两种重构都存在这一事实表明两者在不同的情况下都是合适的。

内联到单个语句使代码更紧凑,有时更具可读性。您可以看到正在发生的所有事情,而无需阅读以找出变量的设置位置。

这是一个很好的内联候选:

String name = customer.getName();
String greeting = createGreeting(name);

// ... becomes ...
String greeting = createGreeting(customer.getName());

提取局部变量将可能很长的语句变成两个(或更多)更短的语句。它还可以让您重复使用一个值,而不是计算两次。

这是一个示例,我们只是将语句分成更小的块。

String greeting = createGreeting(greetingFactory.get(customer.getTitle()), customer.getName());

// ... becomes ...
Title title = customer.getTitle();
String name = customer.getName();
String greeting = createGreeting(greetingFactory.get(title), name));

...这是一个我们重用计算值的示例。

// doing the work twice
CustomerCategory category = findCategory(totalOrderValues(
     customer.getOrders(currentMonth)));
List<Promotion> eligiblePromotions = findEligiblePromotions(totalOrderValues(
     customer.getOrders(currentMonth)));

// ... becomes ...
BigInteger totalOrderValues = totalOrderValues(
    customer.getOrders(currentMonth))
CustomerCategory category = findCategory(totalOrderValues);
List<Promotion> eligiblePromotions = findEligiblePromotions(totalOrderValues);

一般来说,更喜欢内联版本,直到你看到行太长和太复杂。然后提取一个局部变量(或提取一个方法)以使其更整洁。如果存储一个值以避免重复昂贵的计算是有意义的,那么就这样做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-05
    • 1970-01-01
    • 2012-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多