最有效的使用'如果'

时间:2016-06-30 07:29:49

标签: php algorithm

代码1:

if( !(varOfsomeClass->isValid($imParams)) ){
    //some function i need to run
}
  • 运行功能isValid
  • 反向值而非(!)
  • 使用if
  • 检查值

代码2:

if( (varOfsomeClass->isValid($imParams)) ){
} else {
    //some function i need to run
}
  • 运行功能isValid
  • 使用if
  • 检查值
  • 输入其他部分(可能,或者因为isValid为真而无效)

更有效率?哪个更好用?

nb:代码1确实更“人性化”

6 个答案:

答案 0 :(得分:1)

嗯,我会说示例#1效率更高,但我怀疑这种微优化会在微秒内为你带来性能提升,所以不值得。

请记住,if()本身会评估为真值/假值传递给它的表达式,因此在大多数情况下添加!只是多余的。

换句话说,你为什么要这样做:

$number = 1; 
if(!$number){}

而不是这个。

$number = 1; 
if($number){}

除非您尝试快速输出$numberfalse的内容,否则转到其他内容,使用第一个没有任何意义。

答案 1 :(得分:1)

if( !(varOfsomeClass->isValid($imParams)) ){
    //some function i need to run
}

与代码2类型比较时,此类型代码使用Less资源。

答案 2 :(得分:0)

isValid返回true的情况下,您似乎没有做任何事情。我建议坚持使用第一个版本,其中只有一个if语句,原因有多种:

  • 阅读代码少,易于理解
  • 留空块可以解释为“其他贡献者未完成的代码”

从技术上讲,除了可以保存的JUMP汇编指令(取决于解释器),两个代码都会有效...如果它使代码不易读,不要试着考虑那些微优化

答案 3 :(得分:0)

一个有趣的问题。 我建议把它放在这个迷你测试套件中测试一下:

$startA = microtime(true);
for($i = 0; $i < 10000; $i++)
{
    //Code 1
}
$endA = microtime(true);

unset ($all, $your, $variables);

$startB = microtime(true);
for($i = 0; $i < 10000; $i++)
{
    //Code 2
}
$endB = microtime(true);

echo $endA-$startA."<br />";
echo $endB-$startB."<br />";

答案 4 :(得分:0)

它们都是等效的。

第一个需要额外的!否定语句,第二个需要额外的else语句。在处理if / else构造时,使用的C代码非常有效。甚至可能是第二个语句将被简化为类似于ast解析器中的第一个函数的情况。

然而,第二个不太可读,我会优先考虑第一个。

答案 5 :(得分:0)

最好使用if取决于您需要返回值的方式,

  1. 如果您只需要返回值非条件(反向/错误),您可以使用:

    if ( ! varOfsomeClass->isValid( $imParams ) ){
        //some function you need to run
    }
    
  2. 如果您需要正确(true)返回值,请使用:

    if ( varOfsomeClass->isValid( $imParams ) ){
        // some function you need to run true
    }
    
  3. 如果您需要 true和false(两者)返回值,请使用:

    if ( varOfsomeClass->isValid( $imParams ) ){
        // some function you need to run true
    } else {
        // some function you need to run false
    }
    
  4. 对于你的说明,不要使用它:

    if ( varOfsomeClass->isValid( $imParams ) ){
    } else {
        //some function you need to run
    }
    

    那就是你所谓的“人类”,它就像你很轻但你在黑暗中。 :)