比方說,你有一個很長的方法,像這樣:return語句做提取方法
int monster()
{
int rc = 0;
// some statements ...
if (dragonSlayer.on_vacation()) {
cout << "We are screwed!\n";
if (callTheKing() == true)
return 1;
else
return 2;
} else {
cout << "We are saved!\n";
slayTheDragon();
}
// rest of long method...
return rc;
}
和我工作skeletonizing的代碼。我想提取龍殺死部分到
int handleDragon() {
if (dragonSlayer.on_vacation()) {
cout << "We are screwed!\n";
if (callTheKing() == true)
return 1;
else
return 2;
} else {
cout << "We are saved!\n";
slayTheDragon();
}
return 0; // ?
}
並用handleDragon()調用替換怪物()中的代碼。
但有一個問題。該部分中間有一個返回聲明。如果我保留處理handleDragon()的返回代碼的部分,它將保持垃圾大方法。
除了使用異常,有沒有一種優雅和安全的方式來重構這段代碼從怪物方法?應如何處理這些類型的情況?
如果你打算比較布爾值與'true'那樣的話,請注意'callTheKing()== true'也是一個布爾值。所以它應該是'(callTheKing()== true)== true'。 – 2010-06-28 18:00:47
更嚴重的是,如果你打算使用返回值而不是例外,那麼你需要一個一致的方案。在這裏你有一個函數返回'int'(成功爲零),其他函數返回'bool'(零失敗)。你只是要求有人混合這兩種方案。 – 2010-06-28 18:02:26