不使用goto来重构代码
Refactor code without goto
我有点糊涂了。如果没有goto
,如何重构这个语句?
if(first_expression)
{
// ....
if(second_expression)
{
// ....
}
else
{
goto jump_out;
}
}
else
{
jump_out:
// ....
}
这样好吗?
bool expressionFailed = false;
if(first_expression)
{
if(second_expression)
{
// ....
}
else
expressionsFailed = true;
}
else
expressionsFailed = true;
if(expressionsFailed)
{
// ....
}
我不能使用&&
,因为second_expression = false
if(first_expression)
之后的代码我对你的代码一无所知,但你可以这样做:
void on_error ()
{
//error stuff
}
int main ()
{
if(first_expression)
{
if(second_expression)
{
// ....
}
else
on_error();
}
else
on_error();
}
或者更好:
void job()
{
if(first_expression)
{
if(second_expression)
{
// ....
}
else
throw;
}
else
throw;
}
int main () {
try
{
job();
}
catch ()
{
// err stuff
}
return 0;
}
你做对了。我将把它简化为:
bool succeeded = false;
if(first_expression)
{
if(second_expression)
{
succeeded = true;
// ....
}
}
if(!succeeded)
{
// ....
}
你可以这样重写:
if(first_expression)
{
// ....
if(second_expression)
{
// ....
}
}
if(!first_expression || (first_expression && !second_expression))
{
}
相关文章:
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- 重构类:无法将派生类中成员函数的公共代码移回基类
- 重构此代码以进行优化
- 在C++中重构代码
- 将样本代码重构为类,并没有提高过载功能的实例
- 如何将此代码重构为多线程版本
- 使用OTool进行了重构代码的二进制比较
- 如何重构这个类模板以最小化锅炉板代码
- 函数参数已更改:如何重构代码,尽可能少
- 解开高德纳的结:如何重构意大利面条代码?
- 重构多线程方案的单线程 GUI 代码
- 重构代码以使用 Boost 共享指针
- 使用函数对象重构 C++ 代码
- 绘制游戏组件的重构代码
- 代码重构尝试使用多态性和std::map
- 如何重构C++代码以支持动态数组大小
- 有没有一种方法可以将C++11代码重构为C++代码,这些代码可以由能力较弱的编译器编译
- 重构常规c++代码模式
- 用c++中已有的类重构代码
- 不使用goto来重构代码