首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何整理过多的if语句以提高可读性

如何整理过多的if语句以提高可读性
EN

Stack Overflow用户
提问于 2009-10-30 19:22:09
回答 3查看 4.1K关注 0票数 6

我有一个我经常在网站上看到的代码的例子,我想要改进,并希望得到一些帮助。我经常在page_load方法中看到5-10个嵌套的if语句,旨在消除无效的用户输入,但这看起来很丑陋,很难阅读和维护。

你建议如何清理下面的代码示例?我想要消除的主要内容是嵌套的if语句。

代码语言:javascript
复制
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);
}

正如你所看到的,这很快就会变得相当混乱!在这种情况下,是否有我应该遵循的模式或实践?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-10-30 19:31:07

通过使用Guard Clauses sir

代码语言:javascript
复制
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

PS。使用return或抛出错误

票数 20
EN

Stack Overflow用户

发布于 2009-10-30 19:34:03

您可以通过否定条件并编写if-else链来清理嵌套:

代码语言:javascript
复制
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.
}
票数 3
EN

Stack Overflow用户

发布于 2009-10-30 19:52:46

最好将其拆分成多个方法(函数) .It将很容易understand.If一些新人通过阅读方法名本身就能理解代码的逻辑(注意:方法名应该表示它所做的测试).Sample代码:

代码语言:javascript
复制
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;
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1649248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档