代码中大量的套娃式ifelse优化方案

这篇具有很好参考价值的文章主要介绍了代码中大量的套娃式ifelse优化方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

代码中大量的套娃式ifelse优化方案

前期迭代懒得优化,来一个需求,加一个if,久而久之,就串成了一座金字塔。

当代码已经复杂到难以维护的程度之后,只能狠下心重构优化。那,有什么方案可以优雅的优化掉这些多余的

if/else?

1、提前return

这是判断条件取反的做法,代码在逻辑表达上会更清晰,看下面代码:

if (condition) {
 // do something
} else {
  return xxx;
}

其实,每次看到上面这种代码,我都心里抓痒,完全可以先判断!condition,干掉else。

if (!condition) {
  return xxx;
 
} 
// do something

2、策略模式

有这么一种场景,根据不同的参数走不同的逻辑,其实这种场景很常见。

最一般的实现:

if (strategy.equals("fast")) {
  // 快速执行
} else if (strategy.equals("normal")) {
  // 正常执行
} else if (strategy.equals("smooth")) {
  // 平滑执行
} else if (strategy.equals("slow")) {
  // 慢慢执行
}

看上面代码,有4种策略,有两种优化方案。

2.1 多态
interface Strategy {
  void run() throws Exception;
}
 
class FastStrategy implements Strategy {
    @Override
    void run() throws Exception {
        // 快速执行逻辑
    }
}
 
class NormalStrategy implements Strategy {
    @Override
    void run() throws Exception {
        // 正常执行逻辑
    }
}
 
class SmoothStrategy implements Strategy {
    @Override
    void run() throws Exception {
        // 平滑执行逻辑
    }
}
 
class SlowStrategy implements Strategy {
    @Override
    void run() throws Exception {
        // 慢速执行逻辑
    }
}

具体策略对象存放在一个Map中,优化后的实现:

Strategy strategy = map.get(param);
strategy.run();

上面这种优化方案有一个弊端,为了能够快速拿到对应的策略实现,需要map对象来保存策略,当添加一个新策

略的时候,还需要手动添加到map中,容易被忽略。

2.2 枚举

发现很多同学不知道在枚举中可以定义方法,这里定义一个表示状态的枚举,另外可以实现一个run方法。

public enum Status {
    NEW(0) {
      @Override
      void run() {
        //do something  
      }
    },
    RUNNABLE(1) {
      @Override
       void run() {
         //do something  
      }
    };
 
    public int statusCode;
 
    abstract void run();
 
    Status(int statusCode){
        this.statusCode = statusCode;
    }
}

重新定义策略枚举:

public enum Strategy {
    FAST {
      @Override
      void run() {
        //do something  
      }
    },
    NORMAL {
      @Override
       void run() {
         //do something  
      }
    },
 
    SMOOTH {
      @Override
       void run() {
         //do something  
      }
    },
 
    SLOW {
      @Override
       void run() {
         //do something  
      }
    };
    abstract void run();
}

通过枚举优化之后的代码如下:

Strategy strategy = Strategy.valueOf(param);
strategy.run();

3、学会使用 Optional

Optional主要用于非空判断,由于是jdk8新特性,所以使用的不是特别多,但是用起来真的爽。

使用之前:

if (user == null) {
    //do action 1
} else {
    //do action2
}

如果登录用户为空,执行action1,否则执行action 2,使用Optional优化之后,让非空校验更加优雅,间接的减

少if操作:

Optional<User> userOptional = Optional.ofNullable(user);
userOptional.map(action1).orElse(action2);

4、数组小技巧

来自google解释,这是一种编程模式,叫做表驱动法,本质是从表里查询信息来代替逻辑语句,比如有这么一个

场景,通过月份来获取当月的天数,仅作为案例演示,数据并不严谨。

一般的实现:

int getDays(int month){
    if (month == 1)  return 31;
    if (month == 2)  return 29;
    if (month == 3)  return 31;
    if (month == 4)  return 30;
    if (month == 5)  return 31;
    if (month == 6)  return 30;
    if (month == 7)  return 31;
    if (month == 8)  return 31;
    if (month == 9)  return 30;
    if (month == 10)  return 31;
    if (month == 11)  return 30;
    if (month == 12)  return 31;
}

优化后的代码:

int monthDays[12] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int getDays(int month){
    return monthDays[--month];
}

5、结束

if else作为每种编程语言都不可或缺的条件语句,在编程时会大量的用到。一般建议嵌套不要超过三层,如果一段

代码存在过多的if else嵌套,代码的可读性就会急速下降,后期维护难度也大大提高。文章来源地址https://www.toymoban.com/news/detail-731538.html

到了这里,关于代码中大量的套娃式ifelse优化方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • mysql 大量数据插入优化

    对于一些数据量较大的系统,数据库面临的问题除了查询效率低下,还有就是数据入库时间长,当有大量数据需要插入数据库时(比如10万,50万,100万条数据),如果继续使用单条语句进行插入的话,会很影响数据库效率,因此,优化数据库插入性能是很有意义的,那么,怎么

    2023年04月08日
    浏览(43)
  • RecycleView加载大量图片卡顿优化

    RecycleView实现类似相册功能的时候,在加载大量图片的时候,快速滑动的时候能感到明显的卡顿,因此需要我们根据滑动状态去做优化。 我们可以监听RecycleView滑动状态,当处于滑动状态时,不进行图片的加载,当滑动停止时才进行图片的加载。网上解决方法基本都是这样的

    2024年02月08日
    浏览(48)
  • sqlserver大量数据查询的优化方式--查询结构优化

    1.应尽量 避免在 where 子句中使用 !=或操作符 ,否则将引擎放弃使用索引而进行全表扫描。 2.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 3.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行

    2024年02月03日
    浏览(78)
  • 【鲁棒优化】微电网鲁棒优化定价方案研究(Matlab代码实现)

    💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码、数据、文章

    2024年02月12日
    浏览(80)
  • 如何在前端优化中处理大量的图像资源?

    在前端优化中,处理大量的图像资源是一项重要的任务。由于图像占据了网站带宽的大部分,因此优化图像可以显著提高网站的性能和用户体验。下面将介绍一些在前端优化中处理大量图像资源的常见方法。 一、压缩图像 压缩图像是减少图像文件大小和优化图像的最常用方

    2024年01月23日
    浏览(36)
  • Ceph入门到精通-Nginx 大量请求 延迟优化

    优化nginx以处理大量请求并减少延迟可以通过以下几种方法实现: 调整worker_processes和worker_connections参数:增加worker_processes值可以增加nginx的进程数量,提高并发处理能力。增加worker_connections参数的值可以增加每个worker进程可处理的连接数,从而在请求高峰期更好地分配负载。

    2024年02月10日
    浏览(35)
  • 解决前端性能问题:如何优化大量数据渲染和复杂交互?

    ✨✨祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天开心!✨✨  🎈🎈作者主页: 喔的嘛呀🎈🎈 目录 引言 一、分页加载数据 二、虚拟滚动 三、懒加载 四、数据缓存 五、减少重绘和回流 六、优化图片和资源: 七、合并压缩文件 八、使用Web Workers  在前端开发

    2024年03月10日
    浏览(65)
  • Windows下控制台播放Badapple,opencv的使用,以及代码优化方案

    环境准备 VS2022编译环境 Opencv(对图像进行灰度处理)的配置 可以看我写的这篇文章vs下opencv的配置 素材(Badpple的视频文件) 可以私信我 FFmpeg(对视频文件进行处理) 让视频文件的声音分离出来生成mp3文件 关于ffmpeg的音视频分离就到这里,不做赘述。 该程序首先使用VideoCapture打开

    2024年02月13日
    浏览(55)
  • java 批量插入千万条数据优化方案【值得收藏】

    再实际开发应用中总会面临导入大批量数据插入数据库、数据迁移、同步等操作在java 后台执行,执行效率的优化问题随之而来!比如如何 快速往MySQL数据库中导入1000万数据 2、MySQL中新建一张user表,为了方便演示只保留id、昵称、年龄3个字段,建表语句; 3、再次打开pom.x

    2023年04月23日
    浏览(41)
  • 解决前端性能瓶颈:高效处理大量数据渲染与复杂交互的策略与优化方法

    ✨✨祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天开心!✨✨  🎈🎈作者主页: 喔的嘛呀🎈🎈 目录 引言 一、分页加载数据 二、虚拟滚动 三、懒加载 四、数据缓存 五、减少重绘和回流 六、优化图片和资源: 七、合并压缩文件 八、使用Web Workers  在前端开发

    2024年04月27日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包