写点什么

教你如何优雅的改写“if-else”

发布于: 2021 年 02 月 23 日

摘要:这些场景,你是怎么写的代码?


if-else,这是个再正常不过的 coding 习惯,当我们代码量小的时候用来做条件判断是再简单不过的了。但对于优秀程序员来说,这却不是好代码。


不信你往下看…


1. 卫语句提前 return


假设有如下代码



通过对判断条件取反,代码在逻辑表达上会更加清晰



2. 使用 Optional 简化 if 判空


2.1 简化 1 级判空


假设有如下代码



使用 Optional 后



2.2 简化多级判空


假设有如下代码



使用 Optional 后



对于没有 else 的场景,使用 ifPresent 即可



3. 策略模式


假设有如下代码:



这就是不要根据不同的参数类型走不同的代码逻辑,这种场景很常见,他还会以 switch-case 的方式出现:



不同的代码逻辑就代表了不同的策略,我们可以通过如下几个方式改写。


3.1 多态



具体的策略对象可以放在一个 Map 中,优化后的实现类似如下



关于如何存放到 Map 中也两个可以参考的方式。


3.1.1 静态表



3.1.2 Spring 托管下的动态注册


定义一个注册中心用于接受注册信息



将每个 Strategy 交由 Spring 管理,并在构造后注册



使用方式就变成了



3.2 枚举


采用多态会额外产生很多策略类,如果我们已经预先将 petType 定义成了枚举,就会发现可以把 Strategy 中的 invoke()方法放到枚举中,从而完成了一种映射关系。



这样在调用时的代码就类似如下:



3.3 函数式简化策略


同样面对多态会额外产生很多策略类的问题,除了枚举我们还可以使用函数式的方式来改写,这里有个前提最好是策略的内容不会过于复杂,不然在代码的可读性上会比较差


同样我们会有一个 map 静态表,不过 map 里面存放的是 lambda



使用方式则变成了



本文分享自华为云社区《改写 if-else 的几个思路》,原文作者:技术火炬手。


点击关注,第一时间了解华为云新鲜技术~


发布于: 2021 年 02 月 23 日阅读数: 25
用户头像

提供全面深入的云计算技术干货 2020.07.14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
教你如何优雅的改写“if-else”