这可能是一个愚蠢的问题,但它一直在困扰我,所以这里
我知道正常的建议是,例外只是在特殊情况下使用,但我也读过那些主张在方法未能履行合同时使用例外的人
在这两种情况之间,我似乎处于取消状态
如果您的课程中有很多可取消的操作,那么您的代码最终会在整个地方重新检查错误代码
在这种背景下取消可以被视为例外吗?
答案 0 :(得分:2)
例外对于需要非本地处理的罕见情况最有效。听起来这适用于此。所以这纯粹是一个风格问题。非本地控制转移可能更难以考虑,但它可能也意味着更短的代码。我将根据这是什么语言以及已经设计了多少现有代码来做出决定。如果您已经拥有异常安全的清理代码,请继续使用它们。
答案 1 :(得分:0)
我不会在其文字定义中使用“异常”。您可以选择的是将取消捕获为用户驱动的值,也许是布尔值,表示用户已取消操作,并使用此布尔值不执行详尽的错误条件检查。
答案 2 :(得分:0)
这取决于您使用的语言。 例如,它是一种常见的做法,它抛出异常并捕获它以中断例如在一个对象内调用的循环或递归,它不足以跳转到父函数。 考虑这个例子:
<?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();
}
}
?>
总是将布尔值从一个函数传递给另一个函数很烦人,相反,你可以在seeIfPersonIsInsideHideout()中抛出一个优先级,而根本不关心返回值! maby这是一个不好的例子,因为当你有多个可能出现的情况时它真的很重要。然后你必须低音回到你在案例陈述等中检查的常量或字符串或整数。 那么定义你自己的异常类会好得多(更容易编码和不正确,错误的可能性更小)!