教你如何优雅的改写“if-else”
2023-02-18 16:27:25 时间
摘要:这些场景,你是怎么写的代码?
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的几个思路》,原文作者:技术火炬手。
相关文章
- 面霸告诉你这些技术面试的非技术性经验,让你的面试成功率显著提升
- 基于SpringBoot AOP面向切面编程实现Redis分布式锁
- 时序数据库为万物互联打下坚实的数仓基石
- 银丰新融:搭建名单监控管理系统,落实“三反”政策
- 养殖场新来了个“AI管家”
- Open Harmony移植:build lite配置目录全梳理
- 什么是隐私计算,它是怎样保护我们的隐私安全?
- 动手实操丨RC522射频卡模块与IC卡完成充值消费查询的技术实现思路
- 云图说 | 华为云医疗智能体EIHealth,AI赋能基因组研究
- What?构造的查询语句会导致堆栈溢出
- 开发一个不需要重写成Hive QL的大数据SQL引擎
- npm install xxxx --legacy-peer-deps命令是什么?
- 聊聊如何在华为云IoT平台进行产品开发
- 敏捷开发中如何从容应对需求变更?
- 解析数仓OLAP函数:ROLLUP、CUBE、GROUPING SETS
- 基于场景文字的多模态融合的图像分类
- 分享一个JDK批量异步任务工具CompletionService,超好用
- STM32+华为云IOT制作酒驾监控系统:上车就监控
- 源码解析Synchronous Queue 这种特立独行的队列
- 揭秘华为云GaussDB(for Influx):最佳实践之数据建模