Java 变量节约的最佳实践

Java 变量节约的最佳实践,java,Java,有两个代码代码1: if(isApplicable() || isGood()) { //something } private boolean isApplicable() { } private boolean isGood() { } 代码2: boolean applicable = isApplicable(); boolean good = isGood(); if(applicable || good) { //something } private bool

有两个代码代码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可以简化远程调试。

为了概括您的问题,您需要询问以下两种形式:

// 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);
//做两次这项工作
CustomerCategory category=findCategory(totalOrderValues(
customer.getOrders(当前月));
列表eligiblePromotions=findEligiblePromotions(TotalOrderValue(
customer.getOrders(当前月));
// ... 变成。。。
BigInteger totalOrderValues=totalOrderValues(
customer.getOrders(当前月))
CustomerCategory类别=findCategory(TotalOrderValue);
列表eligiblePromotions=findEligiblePromotions(TotalOrderValue);


通常,您会选择内联版本,直到您发现行太长太复杂为止。然后提取一个局部变量(或提取一个方法)使其更整洁。如果有必要存储一个值以避免重复昂贵的计算,那么就这样做。

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