哪种从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上也有一些有趣的对话.