IF ELSE编码风格VS IF编码风格

时间:2015-12-15 13:08:37

标签: if-statement coding-style

我一直在推荐我的新公司的代码,我发现代码并没有包含在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,如果有的话,还请建议其他参考。谢谢。

3 个答案:

答案 0 :(得分:3)

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

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

e.g。

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
      }
   }
}

答案 1 :(得分:1)

当您使用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中包装,在这种情况下,并明确代码和意图。

答案 2 :(得分:0)

如果只想在if语句中的条件失败时执行代码块,则将该块添加为if语句的else部分。这些陈述是独家的。只执行if块或else块,而不是两者都执行。

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