为什么在条件不好的情况下做事情

时间:2017-07-06 16:33:35

标签: php if-statement conditional

今天我在代码审查中发现了一个代码块,它对我来说很奇怪,但我无法找到一个客观原因,为什么这段代码对我来说很奇怪。

代码看起来像这样(它的PHP)

    // inside a for loop
    if( $thing->isGood() === true && saveThing($thing) ) {
      $successfulSavedCount++;
    }
    // for end

    function saveThing($thing) {
      // this method persists $thing to the database
    }

检查$this->isGood() === true对我来说是否合适,但是调用一种方法会让我觉得不对。

很久以前我在某个地方读到条件的事情是不好的风格,但我不记得为什么风格不好。

也许你们中的某个人可以解释为什么这么糟糕(或很好)?

1 个答案:

答案 0 :(得分:0)

在大多数情况下,在条件中执行的事情只是一种糟糕的风格,因为以后很难阅读和维护。尽管如此,这并没有错,因为这是语言所允许的。避免过于复杂的条件陈述的最有说服力的理由是副作用。请考虑以下代码。

$globalVariable = true;    
....
if(checkVariable() && changeVariable()){
    do stuff....
}
function checkVariable(){
    return $globalVariable;
}
function changeVariable(){
    $globalVariable = false;
    return true; //Marking success
}

这个if语句将按顺序执行,所有条件都是正确的。但是,由于&& checkVariable()修改changeVariable()行为的副作用,将checkVariable()添加到条件会使其成为错误。这意味着checkVariable()包含两个值,这是不直观和错误的编码实践,但在此处有效。经验法则是在条件之前执行函数/方法,并将结果存储在变量中以便在条件中使用,以避免歧义。