比方说,你有一个很长的方法,像这样: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