if-statement - 有没有更好的方法来使这个软件流动
问题描述
我有几个函数可以尝试评估一些数据。如果每个函数可以成功评估数据,则返回 1,否则返回 0。这些函数一个接一个地被调用,但如果一个返回值 1,则执行应该停止。
示例函数如下所示:
int function1(std::string &data)
{
// do something
if (success)
{
return 1;
}
return 0;
}
int function2(std::string &data)
{
// do something
if (success)
{
return 1;
}
return 0;
}
... more functions ...
组织这个流程的最清晰的方法是什么?我知道我可以这样使用 if 语句:
void doSomething(void)
{
if (function1(data))
{
return;
}
if (function2(data))
{
return;
}
... more if's ...
}
但这似乎冗长,并且有大量需要输入的 if。我想到的另一个选择是从函数的 return 0 调用下一个函数,如下所示
int function1(std::string &data)
{
// do something
if (success)
{
return 1;
}
return function2(data);
}
int function2(std::string &data)
{
// do something
if (success)
{
return 1;
}
return function3(data);
}
... more functions ...
使调用更清晰,因为您只需要调用 function1() 即可根据需要进行评估,但似乎使代码更难维护。如果需要在流程中间插入另一张支票,或者调用顺序发生变化,则需要更改新函数之后的所有函数以解决此问题。
我是否错过了一些实现这种程序流程的智能清晰的 C++ 方法,或者是这些方法中最好的一种。我目前倾向于 if 方法,但我觉得我错过了一些东西。
解决方案
void doSomething() {
function1(data) || function2(data) /* || ... more function calls ... */;
}
逻辑或||
运算符恰好具有您需要的属性 - 从左到右评估并在一个操作数为 时立即停止true
。
推荐阅读
- javascript - 将清单转换为下拉列表
- python - 是什么破坏了 FastAPI 的 Swagger UI?- 它停止工作并在名为“default”的组下显示 API 调用
- python - 如何将 css 类包含到 django 表单中
- java - 无法使用 javac 和 lombok 在控制台中编译 .h 文件。错误:包 lombok 不存在
- jmeter - 响应代码:非 HTTP 响应代码:org.apache.http.conn.HttpHostConnectException
- php - 使用 sqlsrv_query 插入日期的日期格式是什么?
- javascript - 将 Rgba 颜色值从 js 发送到 Laravel 中的控制器
- c++ - 使用 malloc 进行动态内存分配
- javascript - 如何返回添加了锻炼字段的用户对象?
- python-3.x - 命令出错并出现错误:命令出错,退出状态为 1:python setup.py egg_info