我一直在参考我的新公司的代码,在那里我发现代码没有围绕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
、LOOP
等语句,那么就会开始出现嵌套。
一般来说,应该避免并重构嵌套,因为它阻碍了理解,并且通常表明该方法做得太多。
例如
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语句之后包含该块。总是执行块。