我应该使用Try Catch块来实现我的业务逻辑吗?
Should I use Try Catch Block to implement my Business Logic?
假设我需要这样的东西。(这段代码是错误的,但只是一个例子)。这段代码不是我的问题!这只是一个例子。我知道如何用if else语句来写它。我正在考虑一个更复杂的上下文!
int[] arraynums = new int[3] {1,2,3};
int Sample = 0;
try
{
Sample = arraynums[3];
}
catch
{
Sample=4;
}
在这里,我可以使用另一种不会出现错误的逻辑。但如果我使用try catch块,我仍然可以减少代码。是否建议使用try catch块来解决逻辑?如果没有,那是为什么?
出于以下原因,您不应该使用异常来实现业务逻辑(或流控制):
- 这不是一个好的做法。这会让其他开发者感到困惑,甚至在6个月后你也会感到困惑。(这违反了最少惊讶原则。这使得程序员更难阅读。)
- 糟糕的设计。
其他帖子中有相当多的可用材料:
- 使用异常进行流量控制
- 为什么不使用异常作为常规控制流?
有一个完整的wiki: http://c2.com/cgi/wiki?DontUseExceptionsForFlowControl
为什么不使用if语句呢?
if(arraynums.length > 3)
{
Sample = arraynums[3];
}
else
{
Sample = 4;
}
我假设您的代码是相当人为的,因为重写它很容易,没有例外。异常对于运行时来说是相对昂贵的。如果滥用,它们可能会不必要地降低代码的速度。一般来说,在允许抛出异常条件之前,应该检查异常条件。
推荐阅读:
- 使用异常(c#编程指南)处理异常的最佳实践
我个人只会在出现错误或不确定对象在运行时是否可用的情况下使用try catch。
在您的代码中,您最好将Sample = 4设置为默认值,并在将其设置为arraynums[3]之前进行检查。
相关文章:
- 我的神经网络不起作用 [XOR 问题]
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 我的字符计数代码计算错误.为什么
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- cmake在我的项目中所需的所有静态库都不成功
- 为什么我的代码在输出中增加了93天
- 我的简单if-else语句是如何无法访问的代码
- 为什么我的for循环不能正确获取argv
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 0-1背包代码中的错误.我的代码中有什么错误
- 当我的阵列太大时出现分段错误
- 如何确认我的constexpr表达式实际上已经在编译时执行
- 为什么二进制搜索在我的测试中不起作用
- 如何指定我希望我的LIB链接到的DLL文件?-Visual Studio 2019
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 当我在main中声明了我的2d数组时,为什么我的程序会退出
- OpenGL在启用深度测试时不会丢弃我的碎片
- 为什么我的 std::ref 无法按预期工作?
- clang整洁10忽略了我的NOLINT命令
- 我应该使用Try Catch块来实现我的业务逻辑吗?