gpt4 book ai didi

oop - 为什么许多语言将异常对象视为一等公民?

转载 作者:行者123 更新时间:2023-12-04 16:10:23 24 4
gpt4 key购买 nike

当我们得到一个实际上是异常的对象时,我们可以用它们做任何我们可以用我们的语言做的普通对象。我们可以将它们作为参数传递,我们可以将它们存储在某个集合中,最糟糕的是,我们可以将它们作为方法的结果返回!

所以有可能有人会写出这样臭臭的代码:

public Exception doSomethingCritical()
{
Exception error = null;

try
{
...
}
catch (Exception e)
{
// maybe at least here is the logging of the error if we are lucky
error = e;
}
return error;
}

所以问题是为什么异常对象的概念在许多 OO 语言中是一等公民?如果我们在允许异常对象(如 throw)的语言中只使用有限的结构可能会更好。

最佳答案

将异常视为一种特殊情况并只允许有限的异常功能的问题在于,最终每个好的程序都需要在某个地方对异常做某事,无论它是全局错误处理程序还是适当处理异常的有限项目。通过将异常(exception)设为一等公民,有很多好处,例如:

  • 允许异常的子类化。这对于异常处理来说是无价的,因为处理异常的代码可以缩小它们的范围并只处理它们知道如何处理的异常。我什至会说任何仅捕获“异常”的非全局异常处理例程都可能做错了。
  • 传递数据和异常。如果您在捕获逻辑中唯一知道的是发生了异常,则异常不是很有用。某些异常类型的堆栈跟踪、消息甚至自定义数据对于识别和解决导致异常的问题非常宝贵。
  • 创建使用 OOP 本身的错误处理例程。如果异常不能作为对象传递,那么您就不能拥有处理异常的库 - 好吧,至少不是一个写得很好的库。

除此之外,没有办法像您在上面发布的那样防止错误的异常处理。即使异常不是一等公民,也没有办法阻止开发人员吃掉任何和所有异常并继续他们的快乐方式(至少,不会从根本上打破我们对异常的看法)

关于oop - 为什么许多语言将异常对象视为一等公民?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1643634/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com