if-else的优化,你知道吗
如果if-else的分支较多,阅读起来比较困难,维护起来也容易出错,此时需要进行优化。下面提供几种方式,仅供参考
1.提前return,去除不必要的else
如果if-else代码块包含return语句,可以考虑通过提前return,把多余else干掉,使代码更加优雅。
优化前:
if(condition){ //doSomething }else{ return; }
优化后:
if(!condition){ return; } //doSomething
2.使用条件三目运算符
对于简单的if-else语句,可以直接使用条件三目运算符,使代码更加简洁,更具有可读性。
优化前:
int price ; if(condition){ price = 80; }else{ price = 100; }
优化后:
int price = condition? 80 : 100;
如果有一系列条件返回一样的结果,就不能使用三元表达式了,但可以将它们合并为一个条件表达。
3.使用 Optional
有时候if-else是因为非空判断导致的,这时可以使用Optional
优化前:
User user = new User(); if (user != null) { System.out.println("我不是null"); } else { System.out.println("我是null"); }
优化后:
User user = new User(); Optional.ofNullable(user).filter(u -> { System.out.println("我不是null"); return true; }).orElseGet(()->{ System.out.println("我是null"); return null; });
4.表驱动法
主要作用是使你可以在表中查找信息,而不必用很多的逻辑语句(if或case)才能把它们找出来。听着是不是很懵逼,那就看看下面的案例
public static void main(String[] args) { testAction(2, "sss"); } //根据传入的type不同的方法,实现不同的功能 public static String testAction(Integer type, Object data) { String rs = null; if (type == 1) { rs = eat(data); } else if (type == 2) { rs = fly(data); } else if (type == 3) { rs = drink(data); } return rs; } public static String eat(Object data) { System.out.println("我是eat的方法"); System.out.println(data); return "e";//若需要返回值,就返回,否则返回null即可 } public static String fly(Object data) { System.out.println("我是fly的方法"); System.out.println(data); return "f"; } public static String drink(Object data) { System.out.println("我是drink的方法"); System.out.println(data); return "d"; }
其中方法testAction中包含了一系列的if-else语句去调用不同的方法,那么可以使用函数式接口进行优化:
public static String testNew(Integer type, Object data) { //定义一个map,存储函数式接口,入参是Object类型,出参是String类型 Map<Integer, Function<Object, String>> map = new HashMap<>(); map.put(1, (t) -> eat(t)); map.put(2, (t) -> fly(t)); map.put(3, (t) -> drink(t)); String rs = null; //进行逻辑判断,需要对key进行判断,否则传入的类型不存在会出现空指针异常 if (map.containsKey(type)) { rs = map.get(type).apply(data); } return rs; }
这种方式不仅代码简洁,而且可读性比较高。
就是这么简单,你学废了吗?感觉有用的话,给笔者点个赞吧 !