最佳实践:从switch语句的case块中返回方法?

Pol*_*878 6 .net c#

哪种从switch语句返回bool的方法更可取?我知道这可能是主观的,但我觉得对我们的职业来说,获得最佳实践的意见很重要:).

public bool foo(param)
{
    switch (param)
    {
        case 1:
            if (something)
            {
                return true;
            }

            return false;    
        default:
            return false;
     }
}
Run Code Online (Sandbox Code Playgroud)

- 要么 -

public bool foo(param)
{
    bool flag = false;

    switch (param)
    {
        case 1:
            if (something)
            {
                flag = true;
            }
            break;
        default:
            break;
     }

    return flag;
}
Run Code Online (Sandbox Code Playgroud)

Chr*_*ich 14

这里的区别在于单点回报和多点回报.

通常,单点返回代码往往会执行大量的簿记(临时变量,在循环中检查这些变量),并且随着逻辑变得更复杂而变得毛茸茸.我已经看到了使用while (flag) ... flag = false;模式而不是while (true) ... break;模式的代码,并且读取它并不好玩.

我更喜欢多个返回点,因为它们尽早返回(没有额外的工作完成)并且不需要任何本地人来帮助跟踪当前的返回值.此外,我发现它们比单点返回代码更难阅读.

在c2(SingleFunctionExitPoint)上有一个很好的讨论.

我发现保持方法尽可能"功能"是一件好事(我说这里的"功能"因为我通常做的是C#,在LINQ之外,它不被认为是功能性的).通过"功能",我的意思是我尽量避免变异状态.以本地或成员的形式引入更多状态会使事情变得更难以理解,因为您现在必须考虑它们的值,并且您必须考虑如何设置这些变量(来自另一个方法,来自另一个类,......) .

一般来说,国家是邪恶的,但有时它是一种必要的邪恶.

这个特殊问题在SO上也有一些有趣的对话.


Jea*_*rin 6

我更喜欢第二种方法.
它更具适应性,你可以在函数的最后添加一些工作,这将取决于flag

此外,如果您只有一个案例,您可能想要转移到交换机以外的其他内容