在我的第一次代码评审中(不久前),有人告诉我,在所有switch语句中包含一个default子句是一种很好的实践。我最近想起了这个建议,但不记得理由是什么了。现在我听起来很奇怪。
是否有一个合理的理由总是包含默认语句? 这是语言依赖吗?我不记得当时我在用什么语言了——也许这适用于一些语言而不是其他语言?
在我的第一次代码评审中(不久前),有人告诉我,在所有switch语句中包含一个default子句是一种很好的实践。我最近想起了这个建议,但不记得理由是什么了。现在我听起来很奇怪。
是否有一个合理的理由总是包含默认语句? 这是语言依赖吗?我不记得当时我在用什么语言了——也许这适用于一些语言而不是其他语言?
当前回答
如果开关值(switch(variable))不能达到默认情况,则根本不需要默认情况。即使我们保留默认情况,它也不会被执行。这是死代码。
其他回答
在不真正需要的时候使用默认子句是防御性编程 这通常导致代码过于复杂,因为有太多的错误处理代码。 这种错误处理和检测代码损害了代码的可读性,使维护更加困难,并最终导致比解决更多的错误。
因此,我认为如果不应该达到默认值—您不必添加它。
注意,“不应该达到”意味着如果达到了,这是软件中的一个错误——你确实需要测试可能包含不需要的值的值,因为用户输入等等。
我会说这取决于语言,但在C中,如果你要打开一个枚举类型并处理每个可能的值,最好不要包含默认大小写。这样,如果您稍后添加了一个额外的enum标记,并且忘记将其添加到交换机中,称职的编译器将会就缺少的大小写向您发出警告。
这是一个可选的编码“约定”。是否需要取决于用途。我个人认为,如果你不需要它,它就不应该在那里。为什么要包含一些用户不会使用或接触到的内容?
如果情况的可能性是有限的(即一个布尔值),那么默认子句是多余的!
如果你知道switch语句只有一组严格定义的标签或值,那么就这样做,以覆盖基础,这样你总是会得到有效的结果。只需将默认值放在标签之上,从编程/逻辑上来说,它将是其他值的最佳处理程序。
switch(ResponseValue)
{
default:
case No:
return false;
case Yes;
return true;
}
在我看来,答案是“默认”是可选的,说一个开关必须总是包含一个默认就像说每个“if-elseif”必须包含一个“其他”。 如果有一个逻辑在默认情况下完成,那么'default'语句应该在那里,但否则代码可以继续执行而不做任何事情。