9条消除if...else的锦囊妙计,助你写出更优雅的代码(下)

简介: 9条消除if...else的锦囊妙计,助你写出更优雅的代码(下)

正文


二、消除if...else的锦囊妙计


6、其他的消除if...else的方法


当然实际项目开发中使用if...else判断的场景非常多,上面只是其中几种场景。下面再列举一下,其他常见的场景。


1.根据不同的数字返回不同的字符串


public String getMessage(int code) {  
     if (code == 1) {  
        return"成功";  
     } elseif (code == -1) {  
        return"失败";  
     } elseif (code == -2) {  
        return"网络超时";  
     } elseif (code == -3) {  
        return"参数错误";  
     }  
     thrownew RuntimeException("code错误");  
}


其实,这种判断没有必要,用一个枚举就可以搞定。


publicenum MessageEnum {  
     SUCCESS(1, "成功"),  
     FAIL(-1, "失败"),  
     TIME_OUT(-2, "网络超时"),  
     PARAM_ERROR(-3, "参数错误");  
     privateint code;  
     private String message;  
     MessageEnum(int code, String message) {  
         this.code = code;  
         this.message = message;  
     }  
     public int getCode() {  
        returnthis.code;  
     }  
     public String getMessage() {  
        returnthis.message;  
     }  
     public static MessageEnum getMessageEnum(int code) {  
        return Arrays.stream(MessageEnum.values()).filter(x -> x.code == code).findFirst().orElse(null);  
     }  
}


再把调用方法稍微调整一下


public String getMessage(int code) {  
     MessageEnum messageEnum = MessageEnum.getMessageEnum(code);  
     return messageEnum.getMessage();  
}

完美。


2.集合中的判断


上面的枚举MessageEnum中的getMessageEnum方法,如果不用java8的语法的话,可能要这样写

public static MessageEnum getMessageEnum(int code) {  
     for (MessageEnum messageEnum : MessageEnum.values()) {  
         if (code == messageEnum.code) {  
            return messageEnum;  
         }  
     }  
     returnnull;  
}

对于集合中过滤数据,或者查找方法,java8有更简单的方法消除if...else判断。

public static MessageEnum getMessageEnum(int code) {  
     return Arrays.stream(MessageEnum.values()).filter(x -> x.code == code).findFirst().orElse(null);  
}


3.简单的判断


其实有些简单的if...else完全没有必要写,可以用三目运算符代替,比如这种情况:


public String getMessage2(int code) {  
     if(code == 1) {  
        return"成功";  
     }  
     return"失败";  
}


改成三目运算符:


public String getMessage2(int code) {  
    return code == 1 ? "成功" : "失败";  
}

修改之后代码更简洁一些。


4.spring中的判断


对于参数的异常,越早被发现越好,在spring中提供了Assert用来帮助我们检测参数是否有效。

public void save(Integer code,String name) {  
     if(code == null) {
       throw Exception("code不能为空");     
     } else {
         if(name == null) {
             throw Exception("name不能为空");     
         } else {
             System.out.println("doSave");
         }
     }
 }


如果参数非常多的话,if...else语句会很长,这时如果改成使用Assert类判断,代码会简化很多:


public String save2(Integer code,String name) {      
     Assert.notNull(code,"code不能为空"); 
     Assert.notNull(name,"name不能为空"); 
     System.out.println("doSave");
 }


当然,还有很多其他的场景可以优化if...else,我再这里就不一一介绍了,感兴趣的朋友可以给我留言,一起探讨和研究一下。

相关文章
|
29天前
|
设计模式 安全 测试技术
探索代码之美:从混乱到秩序
【5月更文挑战第32天】在编程的世界中,代码不仅是实现功能的工具,更是艺术的表达。本文将通过个人的技术感悟,探讨如何将混沌的代码转化为有序、高效且易于维护的程序。我们将一起深入理解编码的最佳实践,以及这些实践如何帮助我们构建更加健壮和优雅的软件系统。
|
2月前
|
算法 搜索推荐 数据挖掘
掌握程序员之剑:解析常见算法与其在生活和工作中的影响
掌握程序员之剑:解析常见算法与其在生活和工作中的影响
46 1
|
设计模式 SQL Java
有点狠有点猛,我用责任链模式重构了业务代码
文章开篇,抛出一个老生常谈的问题,学习设计模式有什么作用? 设计模式主要是为了应对代码的复杂性,让其满足开闭原则,提高代码的扩展性 另外,学习的设计模式 一定要在业务代码中落实,只有理论没有真正实施,是无法真正掌握并且灵活运用设计模式的 这篇文章主要说 责任链设计模式,认识此模式是在读 Mybatis 源码时, Interceptor 拦截器主要使用的就是责任链,当时读过后就留下了很深的印象(内心 OS:还能这样玩)
|
Python
一日一技:你的代码是如何被炫技毁掉的
一日一技:你的代码是如何被炫技毁掉的
84 0
|
存储 Python
热饭的测开成果盘点第二十二期:wqrfnium自动维护库
本期介绍的是一个组件,身为python的第三方库,已经被pypi收录,且国内镜像源也早已复制。也就是说可以通过pip install 来下载。这个组件包括:wqrfnium 和 wqrfnium_app 。他们都是基于python/selenium/appium的一个可以自动维护ui元素,抵抗ui元素定位变化的组件。
热饭的测开成果盘点第二十二期:wqrfnium自动维护库
|
存储 安全 算法
重生之我在人间敲代码_Java并发基础_安全性、活跃性以及性能问题
并发编程中我们需要注意的问题有很多,很庆幸前人已经帮我们总结过了,主要有三个方面,分别是:安全性问题、活跃性问题和性能问题。
|
设计模式 移动开发 安全
与其硬啃“屎山”代码,不如用这六步有条不紊实现代码重构 李慧文
对大规模系统进行重构,如果一个人对着又臭又长的代码硬刚,即使花了大量的时间进行手工验证,最后仍然会有很多问题,特别是一些深路径及特殊场景下的问题。其实,大规模的系统级别重构时是有方法的。我们采访了 Thoughtworks 数字化转型与运营 资深咨询师黄俊彬(QCon+案例研习社讲师),请他来分享 MV*模式重构演进的方法和经验。
533 0
与其硬啃“屎山”代码,不如用这六步有条不紊实现代码重构 李慧文
|
设计模式 算法 Java
9条消除if...else的锦囊妙计,助你写出更优雅的代码
9条消除if...else的锦囊妙计,助你写出更优雅的代码
|
机器学习/深度学习 IDE Java
写出一手烂代码的 19 条准则!
「代码写得好」是对机器学习研究者及开发者最好的赞扬。其第一层意思是说,你的模型非常好,有自己的理解与修正;第二层意思是说代码的结构、命名规则、编写逻辑都非常优秀。
225 0
写出一手烂代码的 19 条准则!
|
XML 测试技术 程序员
人月神话札记:整体部分
人月神话札记:整体部分
101 0
人月神话札记:整体部分