以下两个中哪一个最适合性能和标准练习..NET内部如何处理这两个代码片段?
代码1
If(result)
{
process1();
}
else
{
process2();
}
Run Code Online (Sandbox Code Playgroud)
或代码2
If(result)
{
process1();
return;
}
process2();
Run Code Online (Sandbox Code Playgroud)
Jam*_*mes 32
就个人而言,我总是喜欢尽快回来,所以我会去做类似的事情:
if (result)
{
// do something
return;
}
// do something if not result
Run Code Online (Sandbox Code Playgroud)
关于性能,我怀疑它们是否具有任何优势,它实际上取决于可读性和个人品味.我假设.NET会优化你的第一个代码块,如上所述.
Guf*_*ffa 25
如果有的话,性能差异在任何正常情况下都可以忽略不计.
一种标准做法(除其他外)是试图从方法中保留一个退出点,以便讨论第一种选择.
return中间的实际实现最有可能跳转到方法的末尾,其中包含方法的堆栈帧的代码是,因此两个代码的最终可执行代码可能是相同的.
ICR*_*ICR 23
我认为"单一退出点"被高估了.过于教条地坚持它会导致一些非常复杂的代码,它们应该有多个出口点,或者分成更小的方法.
我想说两者之间的选择取决于语义.
'如果某些条件为真,则执行此操作,否则执行此操作'完美映射到if-else.
if (isLoggedIn) {
RedirectToContent();
} else {
RedirectToLogin();
}
Run Code Online (Sandbox Code Playgroud)
'如果某些情况,那么做一些清理和拯救'更好地映射到代码2.这称为保护模式.这使得代码的主体尽可能正常,清晰,整洁,不必要的缩进.它通常用于验证参数或状态(检查某些内容是否为空,或某些内容是否已缓存,类似于此类).
if (user == null) {
RedirectToLogin();
return;
}
DisplayHelloMessage(user.Name);
Run Code Online (Sandbox Code Playgroud)
在同一个项目中使用这两种形式并不罕见.正如我所说,使用哪种方法取决于你要传达的内容.
| 归档时间: |
|
| 查看次数: |
1623 次 |
| 最近记录: |