代码样式:在switch/if语句的分支中重用控制表达式或控制变量

0 c c++ if-statement coding-style switch-statement

最近,我发现了一段看起来像这样的代码.

switch(type)
{
    case TYPE1:
        doSomething1(type, arg1);
        break;
    case TYPE2:
        doSomething2(type, arg1, arg2);
        break;
}
Run Code Online (Sandbox Code Playgroud)

为什么不直接传递那些枚举(TYPE1,TYPE2)而不是传递类型变量?如下例所示.

switch(type)
{
    case TYPE1:
        doSomething1(TYPE1, arg1);
        break;
    case TYPE2:
        doSomething2(TYPE2, arg1, arg2);
        break;
}
Run Code Online (Sandbox Code Playgroud)

我知道当变量被重用时,这种重复是可以的:

  • switch语句的默认情况
  • 多个合并的案例,例如
    switch(type)
    {
        case TYPE1:
        case TYPE2:
        case TYPE3:
            someFunction(type, arg1, arg2);
            break;
    }

但在第一个例子中,它似乎毫无用处.

你觉得怎么样?这种惯例有什么好处吗?

lub*_*bgr 5

在可维护性方面,第一个代码段优于第二个代码段.想象一下,你想要改变分支条件,例如反转TYPE1TYPE2:用第一个片段,你有两个编辑,第二个,有四个.

关于你的解释,传递标志可能是"无用的":从不同分支调用的函数是否确实需要枚举标志,不能从你显示的例子中判断.如果他们不这样做,从函数签名中删除枚举是安全的.但是有这样的堕落

switch (type) {
    case TYPE1:
    case TYPE2:
    doSomething(type /*, ... */);
}
Run Code Online (Sandbox Code Playgroud)

建议将doSomething依赖另一个分支type,这可能是不必要的代码重复和/或违反关注点的分离.