嵌套if语句好还是坏?

问题描述 投票:0回答:5

我有一个投票系统,允许用户为项目投票。现在,我首先检查用户是否已登录,然后检查他们是否已经投票。我想知道是否有更好的方法来做到这一点,因为有人告诉我嵌套 if 语句是应该避免的。

我的代码:

if ($loggedIn) {
    if($row['voted']){
        You Already voted
    }else{
        <a href="#">Agree</a>
    }
}else{
    Please Register
}
php if-statement
5个回答
7
投票

嵌套

if( ... ){ ... }else{ ... }
语句很好,只要它们符合逻辑并且易于阅读/维护。另一种选择是检查你的论点的逻辑,看看是否可以用更简单的方式表达它们。

例如,您提供的代码可以表示为:

if( !$loggedIn ){
  echo 'Please Register';
}elseif( $row['voted'] ){
  echo 'You Already voted';
}else{
  echo '<a href="#">Agree</a>';
}

4
投票

事情没那么简单。你的例子很简单,但其他情况则不然。在您的示例中,很容易跟踪发生的情况,因此可以使用嵌套的 if 语句。在更复杂的代码中,深度嵌套的语句会导致代码难以维护。与编程的许多事情一样,它会因情况而异,您需要根据具体情况做出决定。


0
投票

总体来说还好。您希望避免过于复杂的嵌套 if 语句


0
投票

在这种情况下还好,事实上大多数情况都是如此。只有当你有很多嵌套时,才会出现这个问题,因此它会变得难以阅读,你可能会忘记一些东西,但这就是可读性,使用嵌套 if 语句的逻辑没有任何问题。


0
投票

不好。

做一个永不筑巢者:

  • 尽早退出你的虚假条件
  • 避免使用上帝组件,将逻辑块构建为单独的可组合单元。
if (!loggedIn) {
  return 'Please Register';
}

if(!!row.voted){
  return 'You Already voted';
}

return 'agree';

大多数建议都是在假设您的团队是以下任一者的情况下给出的:

  • 只有你
  • 您和其他纪律严明、挑剔的开发人员

现实(由于招聘市场条件)是您的团队的时间和经验会很差。

演示可扩展和异步的方法,使代码长期保持可读性。

避免“编码高尔夫”的诱惑

© www.soinside.com 2019 - 2024. All rights reserved.