一个快速迭代的项目,时间久了之后,代码中可能会充斥着大量的if/else,嵌套6、7层,一个函数几百行,简!直!看!死!人!

这个无限循环嵌套,只是总循环的一部分。。。我已经绕晕在黄桷湾立交

仔细数了数,一共有 11 层的嵌套!!!接手这种项目的同学,内心应该是绝望的。

出现这种情况的原因很多

  • 设计不够完善
  • 需求考虑不完全
  • 开发人员变动

但最为致命的是“懒”

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

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

1. 提前return

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

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

2. 策略模式

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

最一般的实现:

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

2.1 多态

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

上面这种优化方案有一个弊端,为了能够快速拿到对应的策略实现,需要map对象来保存策略,当添加一个新策略的时候,还需要手动添加到map中,容易被忽略。

2.2 枚举

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

重新定义策略枚举

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

3. 学会使用 Optional

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

使用之前:

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

4. 数组小技巧

来自google解释,这是一种编程模式,叫做表驱动法,本质是从表里查询信息来代替逻辑语句,比如有这么一个场景,通过月份来获取当月的天数,仅作为案例演示,数据并不严谨。

一般的实现:

优化后的代码

结束

if else作为每种编程语言都不可或缺的条件语句,在编程时会大量的用到。一般建议嵌套不要超过三层,如果一段代码存在过多的if else嵌套,代码的可读性就会急速下降,后期维护难度也大大提高。

我目前是在职Java开发,如果你现在正在了解Java技术,想要学好Java,渴望成为一名Java开发工程师,在入门学习Java的过程当中缺乏基础的入门视频教程,你可以关注并私信我:01。我这里有一套最新的Java基础JavaSE的精讲视频教程,这套视频教程是我在年初的时候,根据市场技术栈需求录制的,非常的系统完整。

xml中else if写法_面试官:优化代码中大量的if/else,你有什么方案?相关推荐

  1. informix中if else使用_面试官:代码中出现大量的if/else,需要优化,你有什么好方案?...

    每晚10点,捕获技术思考和创业资源洞察.分享职场生活.职场攻略.领导同事相处技巧和创业资源 文|洪生鹏 本文旨在抛砖引玉,具体实施方案需要自己在实践中动手去尝试,不断尝试,不断改进调优. if els ...

  2. java中二进制怎么说_面试:说说Java中的 volatile 关键词?

    volatile 这个关键字可能很多朋友都听说过,或许也都用过.在 Java 5 之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果.在 Java 5之后,volatile 关 ...

  3. python快速排序最简单写法_面试官:来,这位精神小伙,简简单单写个快速排序吧...

    当你的才华还撑不起你的野心时,你应该静下心去学习 . 面试现场,终于到了紧张刺激的手撕代码环节,你忐忑的心情随着考官的一句话归于平静. 你简直不敢相信眼前这个穿着格子衬衫,牛仔裤角有些发白,头发在风中 ...

  4. 如何在代码中让按钮高亮_如何在C代码中插入移位寄存器

    上期内容:AI Engine到底是什么? 众所周知,标准C或C++代码是没有HDL代码的并行性和时序性的,那么如何在C代码中插入寄存器呢?Vivado HLS提供了IP库,这些IP库使得HLS可直接从 ...

  5. mybatis的简单查询用语句吗_面试官:Mybatis中的TypeHandler你用过吗?

    前言 相信大家用Mybatis这个框架至少一年以上了吧,有没有思考过这样一个问题:数据库有自己的数据类型,Java有自己的数据类型,那么Mybatis是如何把数据库中的类型和Java的数据类型对应的呢 ...

  6. 线程池拒绝策略 开发中常用什么策略_面试官:说说你知道多少种线程池拒绝策略...

    往期文章 为什么阿里Java规约要求谨慎使用SimpleDateFormathttps://www.toutiao.com/i6696127929048367629/ 为什么我强烈推荐你用枚举来实现单 ...

  7. mysql读数据为什么快_面试官:Mysql 中主库跑太快,从库追不上怎么整?

    图注:思维导图 主从常见架构 随着日益增长的访问量,单台数据库的应接能力已经捉襟见肘.因此采用主库写数据,从库读数据这种将读写分离开的主从架构便随之衍生了出来. 在生产环境中,常见的主从架构有很多种, ...

  8. 面试官:说说Innodb中LRU怎么做的?

    引言 某日,小编去面试(纯属瞎编),有了如下对话 面试官:"懂mysql吧,知道CPU在读硬盘上数据的时候,是怎么解决CPU和硬盘速度不一致问题么?"我:"懂啊,mysq ...

  9. 【Redis系列】面试官:Redis中的数据已经过期,为什么还占用这内存?

    如果有面试官问Redis中的数据已经过期为什么还占用这内存? 它是因为Redis本身的过期策略和缓存淘汰机制所导致的. 说说Redis的过期策略和缓存淘汰机制 先来说说Redis的过期策略,Redis ...

最新文章

  1. 好久没有处理过故障了
  2. 【php内核与扩展开发系列】PHP生命周期---启动、终止与模式
  3. python token 访问控制_python 产生token及token验证
  4. [转载MSDN]IIS 7.0中的Live Smooth Streaming -入门
  5. 深度学习(08)-- Residual Network (ResNet)
  6. 大数据之Spark教程
  7. python tab补全
  8. Git--生成公钥和私钥并添加gitlab访问权限
  9. matlab 计算图像的基本参数
  10. 【内外网映射】通过外网ip来访问虚拟机服务器【转载】
  11. 批量删除2012年9月份以前的表
  12. 华为云HCIE认证有多难?考试内容是什么?
  13. (白光LED显色性)计算白光LED的显色指数(CRI)数据异常,色质指数CQS来替代
  14. android中menu重写哪些方法,在Android中Menu的使用
  15. 什么是Windows驱动程序?
  16. 【程序员的自我修养】[动态图文] 超详解函数栈帧
  17. const T vs. T const ——Dan Saks 【翻译】
  18. 30分钟java桌球小游戏,30分钟完成桌球小游戏项目
  19. Labview2018视频教程(共51节)
  20. 零信任时代,企业如何提升自身安全?

热门文章

  1. java long short_Java Long类shortValue()方法与示例
  2. mysql replication health is not ok_mysql配置mha高可用防火墙未关闭报错
  3. excel取整函数_查询函数Choose、Lookup、Hlookup、Vlookup应用技巧解读
  4. 如何用matlab分析代谢,代谢流分析工具-CellNetAnalyzer
  5. 二级缓存使用步骤_Mybatis的一级缓存和二级缓存的理解以及用法
  6. Java 设计模式之 Composite 组合模式
  7. html5 人脸,HTML5 可拖拉的人*皮(人脸)面具
  8. c语言二维数组总成绩,c语言5个人3科成绩总分和平均分,用二维数组
  9. new file会创建文件吗_Python处理文件—os模块
  10. 使用no-gui 模式执行分布式测试