为了我的讨论,布尔可以有2个状态,即True或False。其他任何与编程语言规范不一致的地方。如果您的工具链不符合其规格,则无论您做什么都将被抽水。如果开发人员创建的Bool类型具有两个以上的状态,那将是他在我的代码库上所做的最后一件事。
选项A。
if (var == true) {
...
} else if (var == false) {
...
} else {
...
}
选项B
if (var == true) {
...
} else {
...
}
我断言选项B更可靠.....
任何花招都可以告诉您处理意外错误。一旦想到它们,它们通常很容易被发现。您的教授给出的示例不可能发生,因此这是一个非常糟糕的示例。
如果没有复杂的测试工具,就不可能进行A测试。如果您无法创建它,您将如何对其进行测试?如果您尚未测试代码,怎么知道它有效?如果您不知道它是否有效,则说明您不是在编写功能强大的软件。我认为他们仍然称其为Catch22(很棒的电影,有时看)。
选项B很难测试。
下一个问题,问您这个问题的教授:“如果布尔既不是True也不是False,您希望我对此做些什么?” 那应该导致一个非常有趣的讨论.....
在大多数情况下,核心转储是适当的,最坏的情况是使用户烦恼或花费大量金钱。如果说模块是航天飞机实时重入计算系统,该怎么办?任何答案,无论多么不准确,都不会比中止更糟,这将杀死用户。因此,如果您知道答案可能是错误的,该怎么办,请继续尝试50/50,否则放弃并尝试100%失败。如果我是机组人员,我会乘50/50。
选项A杀死我选项B给我带来生存的机会。
但是,等等-这是对航天飞机再入的模拟-那么呢?中止,以便您了解。听起来是个好主意?-否-因为您需要测试计划交付的代码。
选项A更适合模拟,但不能部署。由于选项B是已部署的代码,因此没有用,因此模拟执行与实时系统相同。
假设这是一个有效的担忧。更好的解决方案是将错误处理与应用程序逻辑隔离开。
if (var != true || var != false) {
errorReport("Hell just froze over, var must be true or false")
}
......
if (var == true){
....
} else {
....
}
进一步阅读 -Therac-25 X射线机,阿丽亚娜5号火箭故障和其他故障(链接有很多断开的链接,但足够的信息足以帮助Google)