为什么干净的代码禁止 else 表达式

2022-08-30 20:25:53

我在一个函数中有这个代码:

if ($route !== null) { // a route was found
    $route->dispatch();
} else {
    // show 404 page
    $this->showErrorPage(404);
}

现在 PHPmd 给出了一个错误:

方法运行使用 else 表达式。否则从来都不是必需的,您可以简化代码以在没有其他东西的情况下工作。

现在我想知道,如果真的会是更好的代码来避免其他代码,而只是向 if 部分添加一个 return 语句?


答案 1

PHPMD 希望您使用早期返回语句来避免 else 块。如下所示。

function foo($access) 
{
    if ($access) {
        return true;
    }

    return false;
}

您可以通过将以下内容添加到类文档块来禁止显示此警告。

/**
 * @SuppressWarnings(PHPMD.ElseExpression)
 */

答案 2

您通常可以重写表达式以仅使用 if,并且它确实主观上使代码更具可读性。

例如,如果 showErrorPage 中断了代码的执行,则此代码的行为方式将相同。

if ($route == null) { 

   $this->showErrorPage(404);
} 
$route->dispatch();

如果 if 语句的内容没有中断执行,则可以添加一个返回值

if ($route == null) { 

   $this->showErrorPage(404);
   return;
} 
$route->dispatch();

如果你在循环内,你可以跳过那个迭代,使用继续

    foreach ($things as $thing ) {
        if ($thing == null) {
            //do stuff and skip loop iteration
            continue;
        }     

        //Things written from this point on act as "else"

    }

推荐