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

作者 : 开心源码 本文共735个字,预计阅读时间需要2分钟 发布时间: 2022-05-14 共100人阅读

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

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的几个思路》,原文作者:技术火炬手。

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 教你如何优雅的改写“if-else”

发表回复