私が時々疑問に思ったことの1つは、以下に示す2つのスタイル(ある場合)のうち、どちらが優れているかということです。ガード条件が満たされていない場合はすぐに戻るのが良いですか、それともガード条件が満たされた場合にのみ他のことを行うべきですか?
議論のために、ガード条件は、例外をスローすることによって制御フローに影響を与える可能性のあるものではなく、要素がコレクションにあるかどうかを確認するなど、ブール値を返す単純なテストであると想定してください。また、メソッド/関数がエディターのスクロールを必要としないほど短いと仮定します。
// Style 1
public SomeType aMethod() {
SomeType result = null;
if (!guardCondition()) {
return result;
}
doStuffToResult(result);
doMoreStuffToResult(result);
return result;
}
// Style 2
public SomeType aMethod() {
SomeType result = null;
if (guardCondition()) {
doStuffToResult(result);
doMoreStuffToResult(result);
}
return result;
}