【问题标题】:IF ELSE coding style VS IF coding style [duplicate]IF ELSE 编码风格 VS IF 编码风格 [重复]
【发布时间】:2016-03-21 07:07:15
【问题描述】:

我一直在参考我的新公司的代码,我发现代码没有包裹在 IF 和 ELSE 周围,因此在流程中有点混乱。例如:

if(user_is_registered)
  {
      // You are already registered.
      //exit
  }
//New user's registration code goes here

而我的上一家公司则采用另一种方式,即:

if(user_is_registered)
   {
      // You are already registered.
   }
else
   {
      //New user's registration code goes here
   }

像每个新生一样,我很困惑,这是出于正当理由遵循的最佳做法。请赐教。我试图找出相同的答案,但无法得到。有一些答案,其中一些专家支持方式 1,一些专家支持方式 2。如果可用,还请向我推荐其他参考。谢谢。

【问题讨论】:

标签: if-statement coding-style


【解决方案1】:

这很可能是为了避免嵌套而做出的决定。在您的示例中,这不是很明显,但是如果在注册逻辑的下方还有更多的 IFLOOP 等语句,则嵌套开始发生。

作为一般规则,应避免嵌套并将其重构掉,因为它会妨碍理解并且通常表明该方法做得太多。

例如

if ( user_is_registered )
{
    // do something & return
}
else
{
   // do something else

   if ( some_other_condition )
   {
      // do another thing

      while (something_is_not_true)
      {
        // loopy things
      }
   }
}

【讨论】:

  • 我提供的代码很简单,但实际代码很长,会随着业务的增长而增长。
  • 但是如果我们避免嵌套返回点的数量会根据this article而急剧增加
  • 当然,您将有更多的嵌套减少的 return 语句 - 我个人认为为提高可读性和理解性付出的代价相对较小。
【解决方案2】:

当您使用else 时,您正在构建非常明确的逻辑。通过使用单独的 if 语句,您可以在给定条件下应用多个规则块。

可能是被比较的对象满足多个要求,所以Else 不会有任何好处。

举个例子:

    var x = 10;

    if (x < 11){
        // do something
        // - this gets hit
    }else{
        // do something else
    }

    // perhaps i want to have multiple conditions that x meets..
    if (x < 11){
       // do something
        // - this gets hit
    }

    if {x == 10){
      // do something
      // - this gets hit - provided the if before didn't make changes to X
    }

    if (x != 10){
       // do something - this won't be hit, unless a previous if made changes to x
    }

现在 - 当你举你的特定例子时,如果没有办法退出该方法,你的第一个块中的 //New user's registration code goes here 总是会触发,就像你的 if 一样。在您的第二个块中,它仅在 if 不匹配时触发。

就我个人而言,在这种情况下,我会用 if/else 进行包装,并明确说明代码和意图。

【讨论】:

    【解决方案3】:

    如果您希望仅当 if 语句中的条件失败时才执行代码块,则将该代码块添加为 if 语句的 else 部分。声明是排他性的。只执行 if 块或 else 块,而不是两者都执行。

    如果您希望代码块始终被执行,请在 if 语句之后包含该代码块。该块总是被执行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-12
      • 1970-01-01
      • 2013-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多