有很多if-else,该如何优化?

YOLOv8+ByteTrack实战:5分钟搞定多目标跟踪(附鱼群检测调参秘籍) 本文详细介绍了如何利用YOLOv8和ByteTrack快速实现多目标跟踪,特别针对鱼群检测等复杂场景提供参数调优秘籍。通过环境配置、核心机制解析和专项调优技巧,开发者可在5分钟内搭建高效跟踪系统,适用于水产养殖、交通监控等实际应用。文章还包含工程落地方案和性能优化建议,帮助实现精准的鱼群计数与行为分析。 阅读详情
0

这是我重构之后的代码:各位大神看看呢,我一直在纠结设计模式..要疯==

你没见过我们的if else,拿出来吓死你!!!

 

— 蒲柳隐逸 · 2016年01月20日

switch 也是一种解决方案的,不错

 

— 程序猿小何 · 2016年01月27日

评论支持部分 Markdown 语法: **bold** _italic_ [link](http://example.com) > 引用 `code` - 列表。
同时,被你 @ 的用户也会收到通知

10个回答

3

已采纳

在if 不满足条件时直接return掉,就不用写else了,这样可以减少if的深度
对于你的例子了,如下:

if (!tokenCheck.equals(token)) {
    obj.setStatus();
    obj.setMsg();
    return obj;
}

if (!isContinue) {
    obj.setStatus();
    obj.setMsg();
    return obj;
}

if (action == 20) {
    // TODO
} else if (action == 30) {
    // TODO
}

这样会让代码好看一点.

如果你纠结设计模式的话,可以把“调用系统通知”和"调用短信接口"抽象成策略,实现共同的接口;
每个策略提供一个accept方法用于判断是否接受传入的actionId,如果accept通过,就可调用该策略的execute方法。

List<Strategy> strategys = new ArrayList<>();
strategys.add(new SystemNoticeStrategy());
strategys.add(new MessageStrategy());

for (Strategy stragety : stragetys) {
    if (strategy.accept(actionId)) {
        strategy.execute();
        break;
    }
}

这个的缺点是要遍历list,其实性能开销并不会太大。

也可以把这些strategys放到map里,然后直接根据actionId从map中取出并执行。

这是一种实现思路,可能还会有更好的方式。

2

这点if else优化个毛线 企业应用那种炒鸡复杂的逻辑都是要跑工作流的 轮不到你业务开发操心
你优化完业务错了就好玩了
唯一一点看着很不爽的 就是你用了一堆println 老老实实找个log4j来用好嘛

复杂一点的应用可以往外甩异常,然后通用的功能,比如鉴权之类,放到拦截器里做,不要放业务里,这样能简洁一点,然而你如果业务就这么复杂优化什么呢

设计模式不是为了模式而模式的,等你哪天上了spring,mybatis这些,想不模式都难
如果再装一点B呢,提示文字要弄到配置里去,或者用i18n来做,每个引用的地方只放对应的id,要不以后改一句话找死你

1

推荐看 《重构:改善既有代码的设计》这本神书,可以解决代码设计上的很多问题,不仅仅是深层的if-else。

虽然有点答非所问的嫌疑,但冒死也要提交回答!

1

如果是我的话 我会写一个Map池,存进map里,直接从Map里取

0

嵌套的 if 可以通过细化成方法来优化

比如你这里

if (tokenCheck.equals(token)) {
    doWork(...);
} else {
    ...
}

void doWork(...) {
    if (isContinue) {
        ...
    } else {
        ....
    }
}

以此类推

0

你这里应该是说的判断actionId的if太多了吧。

如果每个if后面跟的业务逻辑很复杂你可以用多态来代替if

但是你这里似乎不是很复杂,也没什么大问题

0

if-eles 和 switch 在本质上没啥区别,如果条件特别多的话有两种方法细分

一种是先分大段,再分小段,比如

int n = id / 50;
switch (n) {
    case 0:
        do0_49(id);
        break;
    case 1:
        do50_100(id);
        break;
    // ....
}

另一种方法就是建表,把所有 id 对应的东西都放在表中,比如 HashTable。
如果是完全连续(或者少数不连接)的情况,就用数组或者 List 解决了。
你的这个问题中,键是 int,值是 String(保存消息文本) 就好,在其它更复杂的情况下,可以保存对象(比如 Listener 对象,或者 Command 对象之类的)

0

像这种情况,最常见的,也是效率较高的就是做查找表,或者Hash表
即:

建一个表:

Map ActionMap = new HashMap<Integer, String>(){
    {
        put(20, "ddd");
        put(40, "line1\nline2");
    }
};

然后再直接索引输出:

System.out.println(ActoinMap.get(id));
使用 Visual Studio Code 连接 ABAP On-Premise 系统做开发的详细配置步骤 本文详细介绍了如何在Visual Studio Code中通过ABAP Development Tools扩展连接ABAP On-Premise系统。关键步骤包括:通过Ctrl+Shift+P打开命令行面板选择「ABAP: New Destination...」创建RFC连接(仅支持SSO单点登录),选择本地SAPGUI中已有的系统,输入Client ID、语言和用户名(无需密码),最后将目标系统添加到工作区即可开始开发。文章强调了企业安全考虑下仅支持SSO的设计理念,并展示了连接配置的JSON格式示例。整 阅读详情

相关推荐

IOPaint模型部署教程

IOPaint是一款功能全面且强大的AI图像处理工具,它不仅免费开源,还由SOTA(State-of-the-Art,即最先进)AI模型驱动,为图像编辑和修复带来了前所未有的便利和高效。以下是对IOPaint的详细介绍:

SJJS_1的博客 1540

项目中的if else太多了,该怎么重构?

介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom.........

小识的博客 20万+

Sigmastar平台WDR调试实战:从参数解析到鬼影消除的完整指南

本文提供了Sigmastar平台宽动态(WDR)技术的实战调试指南。针对逆光、运动场景下的核心痛点,系统性地解析了从多曝光采集、HDR融合到色调映射的完整管线,并重点阐述了如何通过调整曝光比、运动阈值与调整曲线等关键参数,有效消除运动鬼影、平衡暗部噪声与细节,最终实现清晰稳定的图像效果。

Jerry的专栏 926

if else语句太多,有什么好的方法解决?

if else语句太多,有什么好的方法解决? 一个代码块里面的if判断语句太多了,我也想到用一些设计方法去掉,但是也不是最优化的大家有没有好的方式解决类似问题? 解决方案 » 看能否用SWITCH代替,结构会清晰些    switch() { case 1: { break; } case 2:

evilcry2012的专栏 8378

Windows版本Carla(含RoadRunner插件)源码安装+RoadRunner地图导入

通过跳转浏览器账号密码登录github,不要选择Fine-grained personal access tokens,在git clone时会显示非授权,也不要使用Windows凭据!核心指令:编译PythonAPI–make PythonAPI,,编译Server–make launch,封装”游戏“–make package。完成安装后,在已安装->2022版本右侧->更多->导入配置,选择配置文件(需将配置文件内容更新为手册内容,如下图)->详细信息,更新。不要修改版本,执行上面指令即可!

winnizap的博客 1467

实战指南:从零搭建ROS2 + Cartographer 2D激光SLAM系统

本文详细介绍了如何从零开始搭建ROS2与Cartographer结合的2D激光SLAM系统,涵盖环境准备、激光雷达驱动配置、Cartographer安装与参数调优等关键步骤。通过实战案例和常见问题解决方案,帮助开发者快速掌握激光雷达建图技术,提升机器人自主导航能力。

weixin_29062255的博客 402

代码中如何干掉太多的if else即if else的多种替代方案以提高代码质量通过公司代码审查

if...else控制语句,如果代码里滥用会大大降低代码的可读性、可维护性、可扩展性以及灵活性,进而使整个软件系统造成危害。因为在实际的项目中,需求往往是不断变化的,新需求也层出不穷,因此违反了违反单一职责原则和开闭原则,而且有些公司的代码审查会通不过。所以,if else的替代方案是很有必要的,如位语句,枚举,工厂模式,策略模式,状态模式等等

qq_41889508的博客 5万+

matlab电偶极子源码,电偶极子的MATLAB场模拟

电偶极子周围电场电势分布的MATLAB三维模拟Matlab可以用于模拟四维场的效果,本文以电偶极子的电场和电势场为例展示MATLAB在该方面领域的应用。摘要电偶极子由一个正电荷和一个负电荷组成,其电场和空间电势分布与单电荷相比具有一些重要的特性。本文将给出电场和电势场的近似表达式。这两个量的精确表达式是复杂的,不太常用,因此 MATLAB 被采用来操作精确值和绘制三维分布的远区域, 近区域和一侧区...

weixin_35135480的博客 3150

解决ifelse过多问题

问题 if else过多问题可以分成三类问题: if…else 过多 逻辑表达式复杂 嵌套过深 本节只讨论过多问题: public void test(){    if(condition1){      //do something  &nbs...

HYM BLOG 2751

基于lstm+gru+transformer的电池寿命预测健康状态预测-完整数据代码

基于lstm+gru+transformer的电池寿命预测健康状态预测-完整数据代码

881

python基础:工作会用到的95%的基础python代码都在这了(万字详解!)

本文是一份Python编程语言的快速参考备忘单,涵盖了Python基础语法和常用数据类型。主要内容包括:Python入门指南(打印、变量声明)、内置数据类型(字符串、数值、列表、元组、集合、字典等)、控制结构(判断、循环)、函数定义、文件处理操作以及字符串操作方法(切片、循环遍历等)。这个备忘单特别适合初学者快速查阅Python基础语法,同时也提供了数据类型转换、f-string格式化字符串等实用技巧。通过简洁的代码示例展示了Python的基本语法规则和典型用法。

数据知道的博客 8160

如何解决代码中 if…else 过多的问题

点击关注上方“五分钟学算法”, 设为“置顶或星标”,第一时间送达干货。 来源:cnblogs.com/eric-shao/p/10115577.html 前言问题一:if...else 过多问题表现如何解决小结 问题二:if...else 嵌套过深问题表现如何解决 问题三:if...else 表达式过于复杂问题表现如何解决 总...

墨鱼菜鸡 2355

YOLOv10改进目录一览 | 涉及卷积层、轻量化、注意力、损失函数、Backbone、SPPF、Neck、检测头等全方位改进

如何寻找创新点?为什么要使用这个模块?如何才能提升模型的精度?这是贯穿我们研究始终的问题。创新点在这个专栏中我已经整理好了,这已经省去了大部分时间,但是当我们使用这些新的模块去优化已有的模型,如何才能提升模型的精度,才是我们要达到的最终目标。当然我们可以使用传统的A+B+C的方法去堆积模块,然后是进行大量的实验去排列组合以实现最终的精度提升,这无可厚非。

Limiiiing的博客 1万+

Java如何优化大量的if else

来自Google的解释:表驱动法是一种编程模式,它的本质是,从表里查询信息来代替逻辑语句(if,case)。其实这里的表就是数组而已,通过直接查询数组来获得需要的数据,那么同理,Map之类的容器也可以成为我们编程概念中的表。通过Java8的lambda表达式,我们把需要执行东西存进value中,调用的时候通过匹配key的方式进行。在项目中,总少不了一些非空的判断,可能大部分人还是如下的用法。上面的代码跟第一段是等效的,通过一些新特性让代码更加紧凑。这里的条件返回的结果都是一样的,那么我们先把条件合并起来。

zhaoyang10的专栏 4万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

【JAVA】优化if else的几种方式

【JAVA】优化if else的几种方式

qq_46940224的博客 2672

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

java if else 优化_Java中如何优化if-else

Java中如何优化if-else发布时间:2020-11-11 14:38:48来源:亿速云阅读:54作者:Leah这期内容当中小编将会给大家带来有关Java中如何优化if-else,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。为什么我们写的代码都是if-else?程序员想必都经历过这样的场景:刚开始自己写的代码很简洁,逻辑清晰,函数精简,没有一个if-else...

weixin_35651070的博客 351

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Java8 IF ELSE IF 优化

Java8 IF ELSE IF 优化现象解决方式if else ifswitch case弊端Java8的实现 现象 在程序中总会看到或者碰到很多根据key判断要执行的方法代码等等, ![流程示意图](https://img-blog.csdnimg.cn/2020070413003275.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0RjM

Dc253061007的博客 6097

如何对多个if-else判断进行优化

当我们遇到需要多个条件判断的业务操作时,最简单直接的办法就是用多个if-else判断,虽然能够实现,但当判断条件过多,甚至是多元判断时,我们的代码就会变得非常不好阅读和维护。 举个例子 这里也可以用switch if(status === '1'){ return '未审批' }else if(status === '2'){ return '审批中' }else if(status === '3'){ return '审批通过' }else

伟深么的博客 2万+

优化if else

优化 if else 参考:《阿里巴巴java编码规范》、《设计模式》(清华大学出版)、https://blog.youkuaiyun.com/mifffy_java/article/details/95201289 1、 阿里编程归约 对于控制语句,阿里归约上推荐了一种思路。【推荐】在表达异常的分支时,尽量少用 if else 方式,这种方式可以改写成: if(condition){ ... ...

FBB360JAVA的博客 2841

if-else优化

if else优化

大道至简 1579

如何优化代码中大量的if/else

日常我们在写代码或者读代码时,有时会发现代码中存在大量的if/else。甚至会嵌套多层,这样会大大降低代码的可读性,使得代码维护起来费时费力。那么有什么方案可以优化代码中大量的if/else呢,下面就给大家简单的介绍几种方法。 1. 提前return 在写判断条件时,选择取反判断,这样的话代码在逻辑表达上会更清晰,看下面代码: if (condition) { // do somet...

Evan's Blog ٩(๑❛ᴗ❛๑)۶ 6422

if else if else语句格式_if-else代码优化的八种方案

前言代码中如果if-else比较多,阅读起来比较困难,维护起来也比较困难,很容易出bug,接下来,本文将介绍优化if-else代码的八种方案。优化方案一:提前return,去除不必要的else如果if-else代码块包含return语句,可以考虑通过提前return,把多余else干掉,使代码更加优雅。优化前:if(condition){ //doSomething}else{ ret...

weixin_39598094的博客 251

如何优化if else

超过 3 层的 if-else 的逻辑判断代码可以使用卫语句、策略模式、状态模式等来实现。—— 阿里巴巴java开发手册 需求: 文件上传功能是一个常用的系统功能。那么上传后的文件保存到哪里呢?不同公司综合不同因素,可能会打算把文件上传到不同的服务器中,比如:服务器本地,传输到 ftp 服务器,FastDFS 服务器,hdfs 服务器等。 if else 一般的话条件判断我们使用的是if el...

宏哥的博客 2885

java if else 优化_java if else优化

问题:if else代码如下图如何优化if (ComponentTypeEnum.bar.name().equals(screenData.getComponentType())) {return ResponseUtil.success(barService.get(screenData.getJsonData()));} else {return ResponseUtil.success(yB...

weixin_28990495的博客 220

Js if else 优化

JavaScript个人感悟 if else 优化 优化一般写法优化写法 优化 一般写法 大量的if else /** * 判断是哪一种类型的元件 * @param {*节点_name} e * @param {*返回值} v ==> properties_config * @param {*当前元素} o */ function _chooseisname(e, v, o) { if (!e) return;

qq_44943717的博客 1134

SpringBoot 中优化 if-else 语句的七种方法实战

大家好,我是默语,擅长全栈开发、运维和人工智能技术。在我的博客中,我主要分享技术教程、Bug解决方案、开发工具指南、前沿科技资讯、产品评测、使用体验、优点推广和横向对比评测等内容。今天,我们将深入探讨如何在 SpringBoot 中优化 if-else 语句。随着代码复杂性的增加,传统的 if-else 语句往往会导致代码难以维护和扩展。

沉淀所学,分享所思,让热爱与成长同行。商务记录AI实战经验,助力开发者快速成长。 热爱AI,希望做出有影响力的技术成果。 技术点亮生活,分享连接价值与机会。 专注AI落地实战,陪你走好技术每一步。 3万+
上一篇: struts2为什么用拦截器?有什么好处?起什么作用?
下一篇: Java 中Map与数组的比较
javaPie
博客等级 码龄16年 1171粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值