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


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

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

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

  • 相关阅读:
    django+uwsgi+nginx实现负载均衡
    centos7 pip安装
    centos虚拟环境配置
    cenots7更换国内pip源
    FastDFS缩容
    FastDFS基于group扩容
    centos同步系统时间
    centos永久开放端口
    pip更换国内源
    Java四种访问修饰符
  • 原文地址:https://www.cnblogs.com/huaweiyun/p/14435973.html
Copyright © 2020-2023  润新知