If statement 防御性编程,如果是,那么else应该是一个切换情况?

If statement 防御性编程,如果是,那么else应该是一个切换情况?,if-statement,switch-statement,defensive-programming,If Statement,Switch Statement,Defensive Programming,我正在编写一个if-then-else,突然想到这是一个糟糕的编程: state = "published" # state could be "published" or "draft" ... if state == "published" display_production_copy else display_draft_copy end 然而,当我编写这个函数时,我突然想到我应该写这个 state = "published" # state could be "draf

我正在编写一个if-then-else,突然想到这是一个糟糕的编程:

state = "published" # state could be "published" or "draft"

...

if state == "published"
  display_production_copy
else 
  display_draft_copy
end
然而,当我编写这个函数时,我突然想到我应该写这个

state = "published" # state could be "draft"

...

case state
when "published"
  display_production_copy
when "draft"
  display_draft_copy
else
  fail "Invalid state: #{state}" # throw an exception
end
这样,如果有人添加了一个不同的状态,例如:“正在审阅”,而程序员没有“更新”这个方法,那么就会运行错误的编程

我怀疑,在所有存在一组显式值(TRUE或FALSE除外)的情况下,所有if-then-[elseif]-else比较都应该通过case[switch]进行,并且必须带有引发异常的else


这是防御性的节目吗?还是偏执狂?

仅仅因为你有偏执狂并不意味着他们不想抓住你!:)严肃地说,我认为这要视情况而定。我在一个关于OS命令的项目中遇到了类似的情况,我决定使用与第二个示例相匹配的模型。在这种情况下,我很高兴我做到了,因为使用它的开发人员尝试使用其他他们从未提前识别过的命令,并且必须以自己独特的方式处理。这就停止了他们的行为,发出了一个巨大的红旗(字面意思),所以我们知道马上会发生什么;如果您谈论的是一种具有足够强类型的已编译或预先检查的语言,如果有任何
case
语句未命中所有必需的case,则该语言可能会拒绝构建或运行。然后,如果有人扩展了集合中的潜在成员,他们会立即被告知完成任务,而不是等到有人碰巧击中了代码中的某个特定部分,而他们并没有仔细考虑这件事时才知道。仅仅因为你是偏执狂,并不意味着他们不想抓住你!:)严肃地说,我认为这要视情况而定。我在一个关于OS命令的项目中遇到了类似的情况,我决定使用与第二个示例相匹配的模型。在这种情况下,我很高兴我做到了,因为使用它的开发人员尝试使用其他他们从未提前识别过的命令,并且必须以自己独特的方式处理。这就停止了他们的行为,发出了一个巨大的红旗(字面意思),所以我们知道马上会发生什么;如果您谈论的是一种具有足够强类型的已编译或预先检查的语言,如果有任何
case
语句未命中所有必需的case,则该语言可能会拒绝构建或运行。然后,如果有人扩展了集合中的潜在成员,他们会立即被告知完成任务,而不是在很晚之后,当有人碰巧击中了代码的某个特定部分,而他们并没有仔细考虑这件事时,他们就会完成任务。