If statement 如何整理过多的if语句以提高可读性
我有一个我经常在网站上看到的一些代码的例子,我想改进一下,希望能得到一些帮助。我经常在page_load方法中看到5-10个嵌套的if语句,其目的是消除无效的用户输入,但这看起来很难看,很难读取和维护 您建议如何清理下面的代码示例?我试图消除的主要问题是嵌套的if语句If statement 如何整理过多的if语句以提高可读性,if-statement,coding-style,If Statement,Coding Style,我有一个我经常在网站上看到的一些代码的例子,我想改进一下,希望能得到一些帮助。我经常在page_load方法中看到5-10个嵌套的if语句,其目的是消除无效的用户输入,但这看起来很难看,很难读取和维护 您建议如何清理下面的代码示例?我试图消除的主要问题是嵌套的if语句 string userid = Request.QueryString["userid"]; if (userid != ""){ user = new user(userid); if (user != nu
string userid = Request.QueryString["userid"];
if (userid != ""){
user = new user(userid);
if (user != null){
if (user.hasAccess){
//etc.
}
else{
denyAccess(INVALID_ACCESS);
}
}
else{
denyAccess(INVALID_USER);
}
}
else{
denyAccess(INVALID_PARAMETER);
}
正如你所看到的,这很快就会变得一团糟!在这种情况下,我应该遵循哪些模式或实践?使用
保护条款
string userid = Reuest.QueryString["userid"];
if(userid==null)
return denyAccess(INVALID_PARAMETER);
user = new user(userid);
if(user==null)
return denyAccess(INVALID_USER);
if (!user.hasAccess)
return denyAccess(INVALID_ACCESS);
//do stuff
注意:使用return或throw错误您可以通过否定条件来稍微清理嵌套,并写入if-else链:
string userid = Reuest.QueryString["userid"];
if (userid == "") {
denyAccess(INVALID_PARAMETER);
} else if (null == (user = new user(userid))){
denyAccess(INVALID_USER);
} else if (!user.hasAccess){
denyAccess(INVALID_ACCESS);
} else {
//etc.
}
最好将其拆分为多个方法(函数)。这将很容易理解。如果有新人阅读代码,他/她只需阅读方法名称本身即可理解逻辑(注意:方法名称应表示测试的功能)。示例代码:
string userid = Request.QueryString["userid"];
if(isValidParameter(userId)){
User user=new User(userId);
if(isValidUser(user)&&isUserHasAccess(user)){
//Do whatever you want
}
}
private boolean isUserHasAccess(User user){
if (user.hasAccess){
return true;
}else{
denyAccess(INVALID_ACCESS);
return false;
}
}
private boolean isValidUser(User user){
if(user !=null){
return true;
}else{
denyAccess(INVALID_USER);
return false;
}
}
private boolean isValidParameter(String userId){
if(userid !=""){
return true;
}else{
denyAccess(INVALID_PARAMETER);
return false;
}
}
无法达到该大小写,因为上面有一个user==null大小写。user==null的大小写已被选中。语句的编写顺序很重要。您必须首先检查对象是否为null,然后检查非法值等等。实际上,这是一种有趣的方法。我喜欢它,因为您不再需要多个返回语句。谢谢我想这是个好主意。您是否有这样一个示例,说明这将如何帮助结束当前方法的执行?