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



我一直在参考我的新公司的代码,在那里我发现代码没有围绕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。如果有其他裁判的话,也请给我推荐。非常感谢。

这很可能是为了避免嵌套而做出的决定。在您的示例中,这一点并不明显,但如果在注册逻辑中有更多的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
      }
   }
}

当您使用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,并明确代码和意图。

如果只想在If语句中的条件失败时执行代码块,则将该块添加为If语句的else部分。这些声明是排他性的。只有if块或else块被执行,而不是两者都执行。

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

最新更新