【问题标题】:Is it necessary to explicitly put true/false in a ternary?是否有必要在三元组中明确放置真/假?
【发布时间】:2013-10-09 08:30:17
【问题描述】:

如果我有

return recordsAffected > 0;

返回truefalse,我需要输入return recordsAffected > 0 ? true : false吗?

【问题讨论】:

  • var_dump( recordsAffected > 0 ); 返回什么?
  • 这真的是三元吗,肯定只是碰巧返回布尔值的评估?

标签: php ternary-operator


【解决方案1】:

你当然不需要。

的意图和语义
return recordsAffected > 0;

非常清楚。这应该适用于每个阅读你代码的体面的程序员。

return recordsAffected > 0 ? true : false;

充其量是多余的,但我会更进一步,称其为有害。第二个 sn-p 不会向语句添加任何内容,但会增加复杂性。我敢打赌,如果你不是一直写这样的代码(而且我相信大多数体面的程序员不会),第二个语句会让你至少通过两次才能掌握含义,如果不是更多的话。当有两个语义相同的解决方案时,您应该始终坚持最清晰的一个,这不一定是最明确的一个。没有人会写这样的东西

if(recordsAffected > 0 ? true : false)
{
}

【讨论】:

    【解决方案2】:

    你不需要那个。 主要原因是这将是 2 个操作而不是一个:第一个用于比较,第二个用于值选择。我还想提一下,每个条件运算符(甚至是三元)都会影响性能

    短期测试:

    <?php
    header('Content-Type: text/plain; charset=utf-8');
    
    $start  = microtime(true);
    
    for($i = 1; $j = 1, $i <= 10000000; $i++){
        ($i == $j);
    }
    
    $end    = microtime(true);
    
    echo 'Not ternary: ', $end - $start, PHP_EOL;
    
    $start  = microtime(true);
    
    for($i = 1; $j = 1, $i <= 10000000; $i++){
        ($i == $j ? true : false);
    }
    
    $end    = microtime(true);
    
    echo 'Ternary: ', $end - $start, PHP_EOL;
    ?>
    

    这是results

    【讨论】:

    • 一个有趣的优化角落(我的意思是从 lang POV);我认为即使是 PHP 也能够像 x 一样优化 x ? true : false
    • @ShinTakezou 是的......不过,我相信那是一件事,可能有一天会扼杀性能。可能会添加thisthis 文章。 “我了解”不应影响性能。而且,是的,我也对执行时间感到惊讶。 ;)
    【解决方案3】:

    不,您不必这样做,因为您的代码可以正常工作。您可能会发现一些开发人员建议这样做,因为它更易于阅读和理解,但这是个人意见问题。

    总是像维护你的代码的人是一个知道你住在哪里的暴力精神病患者一样编写代码 - Martin Golding

    【讨论】:

    • 我赞成纯粹关于潜在精神病的建议。
    • 我也是;以防我泄露了我的地址。
    • 我是一个暴力精神病患者,如果你这样做,我会吃掉你的狗foo ? true : false。好吧,我实际上只会对此感到轻微的恼火和推特,但这几乎是一回事。
    • 当然,如果有开发者推荐return condition ? true : false;,那你就不要听他们的意见了……
    • 我想知道你引用了谁,但你编辑答案太快了。 Also on SO.
    猜你喜欢
    • 1970-01-01
    • 2013-02-04
    • 1970-01-01
    • 1970-01-01
    • 2014-10-19
    • 2014-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多