qon*_*onf 19 c c++ if-statement
我正在编写一些数据分析代码,并且必须根据某些标准排除样本.在实践中,我最终编写如下代码:
bool Test(SampleType sample)
{
if( ! SubTest1(sample) )
return false;
if( ! SubTest2(sample) )
return false;
if( ! SubTest3(sample) )
return false;
return true;
}
Run Code Online (Sandbox Code Playgroud)
以下似乎与我相同:
bool Test(SampleType sample)
{
if( ! SubTest1(sample) )
return false;
else if( ! SubTest2(sample) )
return false;
else if( ! SubTest3(sample) )
return false;
else
return true;
}
Run Code Online (Sandbox Code Playgroud)
计算成本方面有区别吗?在可扩展性/可维护性,美学等方面是否存在可论证的优先考虑?
我知道这可能是一个无关紧要的问题,但是一旦我把这些问题困在脑子里,我就需要找到答案.
PS:如果有人关心,我的实际代码截至15/09可以在以下网址找到:http: //folk.uio.no/henrikq/conf.tgz
iam*_*ind 32
编译器为这两个版本生成相同的代码.但是,如果仅与第二个版本进行比较,则第一个版本在可维护性方面更好.
return
遇到语句时代码退出; 所以else
在即将到来的时候没有用if
.它使开发人员更好地理解代码.
此外,如果这是文字代码,那么你仍然可以缩小为,
bool Test(SampleType sample)
{
return (SubTest1(sample) && SubTest2(sample) && SubTest3(sample));
}
Run Code Online (Sandbox Code Playgroud)
Arn*_*anc 29
我会这样做:
return SubTest1(sample) && SubTest2(sample) && SubTest3(sample);
Run Code Online (Sandbox Code Playgroud)
这不会提高性能,但功能可能会(或可能不会)更明显.
sha*_*oth 13
两者在行为方面完全相同,编译器可能会为两者发出相同的机器代码.
它们在可读性方面甚至没有那么大差别 - 两者都具有相同的嵌套量.将此与没有早期返回导致深度嵌套的情况进行比较.
在可读性方面,
bool Test( SampleType sample )
{
return SubTest1( sample )
&& SubTest2( sample )
&& SubTest3( sample );
}
Run Code Online (Sandbox Code Playgroud)
比任何一个选项都清楚得多.否则,你肯定希望else
明确表示,一旦满足其中一个条件,其他任何条件都不会被测试.