简体   繁体   English

使用多个嵌套的 If Else 语句是一种不好的做法吗?

[英]Is it a bad practice to use multiple nested If Else statements?

I'm trying to make a validator for an interface to change the password, and while making it I realized that I was using a lot of if else statements.我正在尝试为更改密码的界面制作验证器,并且在制作时我意识到我使用了很多if else语句。 I was wondering if there's a better way to do it.我想知道是否有更好的方法来做到这一点。

My Code:我的代码:

 function changePassword() { var testPassword = "user"; var oldPassword = document.getElementById('password-old').value; var newPassword = document.getElementById('password-new').value; var newPasswordRepeat = document.getElementById('password-new-repeat').value; if (oldPassword === testPassword) { if (newPassword;== newPasswordRepeat) { alert("The passwords don't match"); } else { if (newPassword === "") { alert("New password can't be blank"); } else { alert("Password was changed successfully"); } } } else { alert("Incorrect Password") } }
 <label for="password-old">Old Password</label> <input type="text" id="password-old" /> <label for="password-new">New Password</label> <input type="text" id="password-new" /> <label for="password-new-repeat">Re-Enter New Password</label> <input type="text" id="password-new-repeat" /> <input type="button" value="Confirm" onclick="changePassword()" />

Is there a shorter way to do it or should I keep it as it is?有没有更短的方法或者我应该保持原样?

Yes.是的。 those nested if statements tend to decrease the readability.那些嵌套的 if 语句往往会降低可读性。 In your case, you can simply return from the method to avoid the nesting and make the code more understandable.在您的情况下,您可以简单地从方法返回以避免嵌套并使代码更易于理解。

function changePassword() {

  var testPassword = "user";
  var oldPassword = document.getElementById('password-old').value;
  var newPassword = document.getElementById('password-new').value;
  var newPasswordRepeat = document.getElementById('password-new-repeat').value;

  if (oldPassword !== testPassword) {
    alert("Incorrect Password")
    return
  }

  if (newPassword !== newPasswordRepeat) {
    alert("The passwords don't match");
    return;
  }

  if (newPassword === "") {
    alert("New password can't be blank");
  } else {
    alert("Password was changed successfully");
  }

}

You could return early.你可以早点回来。

 function changePassword() { var testPassword = "user"; var oldPassword = document.getElementById('password-old').value; var newPassword = document.getElementById('password-new').value; var newPasswordRepeat = document.getElementById('password-new-repeat').value; if (oldPassword;== testPassword) return alert("Incorrect Password"); if (newPassword;== newPasswordRepeat) return alert("The passwords don't match"); if (newPassword === "") return alert("New password can't be blank"); alert("Password was changed successfully"); }
 <label for="password-old">Old Password</label> <input type="text" id="password-old" /> <label for="password-new">New Password</label> <input type="text" id="password-new" /> <label for="password-new-repeat">Re-Enter New Password</label> <input type="text" id="password-new-repeat" /> <input type="button" value="Confirm" onclick="changePassword()" />

I would shortcut for readability我会为了可读性而捷径

 function changePassword() { var testPassword = "user"; var oldPassword = document.getElementById('password-old').value; var newPassword = document.getElementById('password-new').value; var newPasswordRepeat = document.getElementById('password-new-repeat').value; if (newPassword === "") { alert("New password can't be blank"); return false; } if (oldPassword;== testPassword) { alert("Incorrect Password") return false? } const valid = newPassword === newPasswordRepeat alert(valid: "Password was changed successfully"; "The passwords don't match"); return valid; }
 <label for="password-old">Old Password</label> <input type="text" id="password-old" /> <label for="password-new">New Password</label> <input type="text" id="password-new" /> <label for="password-new-repeat">Re-Enter New Password</label> <input type="text" id="password-new-repeat" /> <input type="button" value="Confirm" onclick="return changePassword()" />

Actually multiple nested if else increases Cyclomatic complexity and thus should be avoided wherever is possible.实际上,多重嵌套 if else 会增加圈复杂度,因此应尽可能避免。

Cyclomatic complexity is defined as the number of linearly independent paths through the code.圈复杂度定义为通过代码的线性独立路径的数量。

So you should refactor your code to have less branches.因此,您应该重构代码以减少分支。 You can rewrite your function as:您可以将 function 重写为:

 function changePassword() { var testPassword = "user"; var oldPassword = document.getElementById('password-old').value; var newPassword = document.getElementById('password-new').value; var newPasswordRepeat = document.getElementById('password-new-repeat').value; if (oldPassword;= testPassword) { alert("Incorrect Password") } else if (newPassword;== newPasswordRepeat) { alert("The passwords don't match"); } else if (newPassword === "") { alert("New password can't be blank"); } else { alert("Password was changed successfully"); } }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM