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

Why does clean code forbid else expression

我在函数中有这段代码:

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

现在PHPmd报错:

The method run uses an else expression. Else is never necessary and you can simplify the code to work without else.

现在我想知道避免 else 并在 if 部分添加 return 语句是否真的是更好的代码?

我不会担心 PHPmd 说的,至少在这种情况下。

他们可能想让你使用条件运算符,因为(在他们看来)它是 'cleaner'。

$route !== null  ?  $route->dispatch() : $this->showErrorPage(404) ;

PHPMD 希望您尽早使用 return 语句来避免 else 块。类似于以下内容。

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

    return false;
}

您可以通过将以下内容添加到您的 class 文档块来抑制此警告。

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

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

例如,如果 showErrorPage 中断代码的执行,此代码将以相同的方式运行。

if ($route == null) { 

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

如果您的 if 语句的内容没有中断执行,您可以添加一个 return

if ($route == null) { 

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

如果你在循环中,你可以使用 continue

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

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

    }

通过结束 404 生产分支删除 else 块:

if ($route === null) { 
  // show 404 page
  $this->showErrorPage(404);
  return;
}

// a route was found
$route->dispatch();

这个答案来晚了,但您可以使用另一种方法来解决这个问题 else if。因为有时你不能只 return 如果要遵循某些逻辑。

有你的榜样

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

$route->doSomething();