设计深圳网站制作,网站的内容建设,杭州本地网站有哪些,软件开发外包网站if else 是我们写代码时#xff0c;使用频率最高的关键词之一#xff0c;然而有时过多的 if else 会让我们感到脑壳疼#xff0c;例如下面这个伪代码#xff1a; 是不是很奔溃#xff1f;虽然他是伪代码#xff0c;并且看起来也很夸张#xff0c;但在现实中#xff0c;… if else 是我们写代码时使用频率最高的关键词之一然而有时过多的 if else 会让我们感到脑壳疼例如下面这个伪代码 是不是很奔溃虽然他是伪代码并且看起来也很夸张但在现实中当我们无数次 review 别人代码时都会发现类似的场景那么我们本文就来详细聊聊有没有什么方法可以让我们避免来写这么多的 if else 呢 我们本文提供了 9 种方法来解决掉那些“烦人”的 if else一起来看吧。 1.使用 return 我们使用 return 去掉多余的 else实现代码如下。 优化前代码 if (str.equals(java)) {// 业务代码 ! true;
} else {return ;
}优化后代码 if (str.equals(java)) {return ;
}
return false;这样看起来就会舒服很多虽然相差只有一行代码但真正的高手和普通人之间的差距就是从这一行行代码中体现出来的。 「勿以善小而不为勿以恶小而为之」「千里之堤溃于蚁穴」说的都是同样的道理。 2.使用 Map 使用 Map 数组把相关的判断信息定义为元素信息可以直接避免 if else 判断实现代码如下。 优化前代码 if (t 1) {type name;
} else if (t 2) {type id;
} else if (t 3) {type mobile;
}我们先定义一个 Map 数组把相关判断信息存储起来 MapInteger, String typeMap new HashMap();
typeMap.put(1, name);
typeMap.put(2, id);
typeMap.put(3, mobile);之前的判断语句可以使用以下一行代码代替了 type typeMap.get(ty);3.使用三元运算符 三元运算符也叫三元表达式或者三目运算符/表达式不过代表的都是一个意思优化代码如下。 优化前代码 Integer score 81;
if (score 80) {score 100;
} else {score 60;
}优化后代码 score score 80 ? 100 : 60;4.合并条件表达式 在项目中有些逻辑判断是可以通过梳理和归纳变更为更简单易懂的逻辑判断代码如下所示。 优化前代码 String city 西安;
String area 029;
String province 陕西;
if (西安.equals(city)) {return xian;
}
if (029.equals(area)) {return xian;
}
if (陕西.equals(province)){return xian;
}优化后代码 if (西安.equals(city) || 029.equals(area) || 陕西.equals(province)){return xian;
}5.使用枚举 JDK 1.5 中引入了新的类型——枚举enum我们使用它可以完成很多功能例如下面这个。 优化前代码 Integer typeId 0;
String type Name;
if (Name.equals(type)) {typeId 1;
} else if (Age.equals(type)) {typeId 2;
} else if (Address.equals(type)) {typeId 3;
}优化时我们先来定义一个枚举 public enum TypeEnum {Name(1), Age(2), Address(3);public Integer typeId;TypeEnum(Integer typeId) {this.typeId typeId;}
}之前的 if else 判断就可以被如下一行代码所替代了 typeId TypeEnum.valueOf(Name).typeId;6.使用 Optional 从 JDK 1.8 开始引入 Optional 类在 JDK 9 时对 Optional 类进行了改进增加了 ifPresentOrElse() 方法我们可以借助它来消除 if else 的判断使用如下。 优化前代码 String str java;
if (str null) {System.out.println(Null);
} else {System.out.println(str);
}优化后代码 OptionalString opt Optional.of(java);
opt.ifPresentOrElse(v - System.out.println(v), () - System.out.println(Null));小贴士注意运行版本必须是 JDK 9 才行。 7.梳理优化判断逻辑 和第 4 点比较类似我们可以通过分析 if else 的逻辑判断语义写出更加易懂的代码例如以下这个嵌套判断的优化。 优化前代码 // 年龄大于 18
if (age 18) {// 工资大于 5000if (salary 5000) {// 是否漂亮if (pretty true) {return true;}}
}
return false;优化后代码 if (age 18) {return false;
}
if (salary 5000) {return false;
}
return pretty true; 我们需要尽量把表达式中的包含关系改为平行关系这样代码可读性更高逻辑更清晰。 8.使用多态 继承、封装和多态是 OOP面向对象编程的重要思想本文我们使用多态的思想提供一种去除 if else 方法。 优化前代码 Integer typeId 0;
String type Name;
if (Name.equals(type)) {typeId 1;
} else if (Age.equals(type)) {typeId 2;
} else if (Address.equals(type)) {typeId 3;
}使用多态我们先定义一个接口在接口中声明一个公共返回 typeId 的方法在添加三个子类分别实现这三个子类实现代码如下 public interface IType {public Integer getType();
}public class Name implements IType {Overridepublic Integer getType() {return 1;}
}public class Age implements IType {Overridepublic Integer getType() {return 2;}
}public class Address implements IType {Overridepublic Integer getType() {return 3;}
}注意为了简便我们这里把类和接口放到了一个代码块中在实际开发中应该分别创建一个接口和三个类分别存储。 此时我们之前的 if else 判断就可以改为如下代码 IType itype (IType) Class.forName(com.example. type).newInstance();
Integer typeId itype.getType();有人可能会说这样反而让代码更加复杂了此可谓“杀鸡焉用宰牛刀”的典型范例了。这里作者只是提供一种实现思路和提供了一些简易版的代码以供开发者在实际开发中多一种思路和选择具体用不用需要根据实际情况来定了。灵活变通举一反三才是开发的上乘心法。 9.选择性的使用 switch 很多人都搞不懂 switch 和 if else 的使用场景但在两者都能使用的情况下可以尽量使用 switch因为 switch 在常量分支选择时switch 性能会比 if else 高。 if else 判断代码 if (cmd.equals(add)) {result n1 n2;
} else if (cmd.equals(subtract)) {result n1 - n2;
} else if (cmd.equals(multiply)) {result n1 * n2;
} else if (cmd.equals(divide)) {result n1 / n2;
} else if (cmd.equals(modulo)) {result n1 % n2;
}switch 代码 switch (cmd) {case add:result n1 n2;break;case subtract:result n1 - n2;break;case multiply:result n1 * n2;break;case divide:result n1 / n2;break;case modulo:result n1 % n2;break;
}在 Java 14 可使用 switch 代码块实现代码如下 // java 14
switch (cmd) {case add - {result n1 n2;}case subtract - {result n1 - n2;}case multiply - {result n1 * n2;}case divide - {result n1 / n2;}case modulo - {result n1 % n2;}
}总结 业精于勤荒于嬉行成于思毁于随。编程是一门手艺更是一种乐趣哈佛最受欢迎的幸福课《幸福的方法》一书中写到「让我们能感到快乐和幸福的方法无非是全身心的投入到自己稍微努力一下就能完成的工作中去」是啊太简单的事情通常无法调动起我们的兴趣而太难的工作又会让我们丧失信心只有那些看似很难但稍微努力一点就能完成的事情才会给我们带来巨大的快乐。 我想编程也是一样普通的方法每个人都会写然而优雅一点的代码不是所有人都能写得出来而本文恰恰是提供了写出优雅代码的一些思路希望可以帮助和启发到你。 最后的话 原创不易如果觉得本文对你有用请随手点击一个「在看」这是对作者最大的支持与尊重谢谢你。 参考 鸣谢 https://www.tuicool.com/wx/2euqQvZ http://www.blogjava.net/xzclog/archive/2006/10/16/75399.html END 用了自定义Banner后SpringBoot瞬间变的高大上了... 别再问我 new 字符串创建了几个对象了我来证明给你看 关注公众号发送”进群“老王拉你进读者群。