Exception 例外和取消

Exception 例外和取消,exception,Exception,这可能是一个有点愚蠢的问题,但它一直困扰着我,所以就这样吧 我知道通常的建议是,只有在特殊情况下才使用例外,但我也读到有人主张在方法无法履行其合同时使用例外 在我看来,取消似乎处于这两种情况之间的灰色地带 毫无例外,如果你的类有很多可取消的操作,你的代码最终会到处检查错误代码 在这种情况下,取消可以被视为例外吗?我不会在其字面定义中使用“例外”。您可以选择将取消捕获为用户驱动的值,可能是一个布尔值,表示用户取消了某个操作,并使用此布尔值不执行详尽的错误条件检查 对于需要非本地处理的罕见情况,异常

这可能是一个有点愚蠢的问题,但它一直困扰着我,所以就这样吧

我知道通常的建议是,只有在特殊情况下才使用例外,但我也读到有人主张在方法无法履行其合同时使用例外

在我看来,取消似乎处于这两种情况之间的灰色地带

毫无例外,如果你的类有很多可取消的操作,你的代码最终会到处检查错误代码


在这种情况下,取消可以被视为例外吗?

我不会在其字面定义中使用“例外”。您可以选择将取消捕获为用户驱动的值,可能是一个布尔值,表示用户取消了某个操作,并使用此布尔值不执行详尽的错误条件检查

对于需要非本地处理的罕见情况,异常是最有效的。听起来这在这里也适用。因此,这纯粹是一个文体问题。非本地控制传输可能更难考虑,但也可能意味着代码更短。我将根据这是什么语言以及现有代码中有多少已经被设计为例外来做出决定。如果您已经有异常安全清理代码,请继续使用它们。

这取决于您使用的语言。 例如,在php中,常见的做法是抛出异常并捕获它以中断(例如,在对象中调用的循环或递归)而不足以直接跳到父函数。 考虑这个例子:

<?php
class hideAndSeekWithOnlyOneOtherPlayer {
    public function seek() {
        foreach($rooms as $room) {
            if($this->checkRoom($room)) {
                $this->shoutThatIFoundYou();
                return;
            }
        }
        $this->shoutThatICantFindYou();
    }
    function checkRoom($room) {
        $hideouts = $this->getPossibleHideoutsForRoom($room);
        return $this->checkHideouts($hideouts);
    }
    function checkHideouts($hideouts) {
        foreach($hideouts as $hideout) {
            return $this->checkHideout($hideout);

        }
        return false;
    }
    function checkHideout($hideout) {
        $this->walkToHideout();
        return $this->seeIfPersonIsInsideHideout();
    }
}
?>

总是将布尔值从一个函数传递到另一个函数是很烦人的,相反,您可以在seeifPersonisInSideHiddeout()中抛出一个例外,而根本不关心返回值! 也许这是一个很糟糕的例子,因为当你有多个案例时,它真的变得很重要。然后你必须在case语句中检查一个常量、字符串或整数等。 那么定义自己的异常类就更好了(更容易编码和不可理解,错误可能性更小)