小编典典

switch 语句是否应该始终包含默认子句?

all

在我的第一次代码审查中(不久前),有人告诉我,在所有 switch
语句中包含一个默认子句是一种很好的做法。我最近记得这个建议,但不记得理由是什么。现在对我来说听起来很奇怪。

  1. 总是包含默认语句是否有合理的理由?

  2. 这种语言依赖吗?我不记得我当时使用的是什么语言 - 也许这适用于某些语言而不适用于其他语言?


阅读 110

收藏
2022-04-20

共1个答案

小编典典

Switch case 应该 几乎 总是有一个defaultcase。

使用 a 的原因default

1.“捕捉”一个意想不到的价值

switch(type)
{
    case 1:
        //something
    case 2:
        //something else
    default:
        // unknown type! based on the language,
        // there should probably be some error-handling
        // here, maybe an exception
}

2. 处理“默认”动作,其中的情况是特殊行为。

您在菜单驱动程序和 bash shell 脚本中经常看到这种情况。当变量在 switch-case 之外声明但未初始化时,您也可能会看到这种情况,并且每个
case 都将其初始化为不同的东西。这里的默认值也需要初始化它,以便访问变量的行代码不会引发错误。

3. 向阅读您的代码的人展示您已涵盖该案例。

variable = (variable == "value") ? 1 : 2;
switch(variable)
{
    case 1:
        // something
    case 2:
        // something else
    default:
        // will NOT execute because of the line preceding the switch.
}

这是一个过于简单的例子,但重点是阅读代码的人不应该想知道为什么variable不能是 1 或 2 以外的东西。


我能想到的唯一不使用default的情况是 ,当开关正在检查一些相当明显的东西时,所有其他替代方案都可以被愉快地忽略

switch(keystroke)
{
    case 'w':
        // move up
    case 'a':
        // move left
    case 's':
        // move down
    case 'd':
        // move right
    // no default really required here
}
2022-04-20