「インスタンス変数よりもローカル変数を好む理由」で受け入れられている回答によると、変数は可能な限り最小のスコープ内に存在する必要があります。
問題を私の解釈に単純化します。つまり、この種のコードをリファクタリングする必要があるということです。
public class Main {
private A a;
private B b;
public ABResult getResult() {
getA();
getB();
return ABFactory.mix(a, b);
}
private getA() {
a = SomeFactory.getA();
}
private getB() {
b = SomeFactory.getB();
}
}
このようなものに:
public class Main {
public ABResult getResult() {
A a = getA();
B b = getB();
return ABFactory.mix(a, b);
}
private getA() {
return SomeFactory.getA();
}
private getB() {
return SomeFactory.getB();
}
}
しかし、「変数は可能な限り最小のスコープに住むべき」という「精神」に従って、「変数を持たない」は「変数を持つ」よりも小さい範囲ではないのでしょうか?したがって、上記のバージョンはリファクタリングする必要があると思います。
public class Main {
public ABResult getResult() {
return ABFactory.mix(getA(), getB());
}
private getA() {
return SomeFactory.getA();
}
private getB() {
return SomeFactory.getB();
}
}
そのため、getResult()
ローカル変数はまったくありません。本当?
final
キーワードを使用するかどうかは、スタイルと意見の問題です。