假设您有一个很长的方法,如下所示:
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;
}
我正在研究代码的骨架化。我想把屠龙部分提取出来
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; // ?
}
并将 monster() 中的代码替换为对 handleDragon() 的调用。
但是有个问题。该部分中间有一个 return 语句。如果我保留处理 handleDragon() 的返回码的部分,它将在 big 方法中保留垃圾。
除了使用异常,有没有一种优雅安全的方式将这段代码重构出怪物方法?应该如何处理这些类型的情况?
最佳答案
如果屠龙者可用,则从 handleDragon
方法返回 0:
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;
}
}
然后回到monster
方法,如果返回值大于零,返回那个值,否则继续:
// some statements ...
int handleDragonResult = handleDragon();
if (handleDragonResult > 0) {
return handleDragonResult;
}
// rest of long method...
您还应该记录 handleDragon
方法,以解释返回的值。
关于c++ - 提取方法时返回语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3134681/