当前位置: 首页 > news >正文

重构之去除多余的if-else

一、提前返回(Guard Clauses)

适用场景:当 else 块仅用于处理异常或边界条件时。

  • 优化前:
    if (isValid) {doSomething();
    } else {return;
    }
    
  • 优化后:
    if (!isValid) return;  // 提前处理异常,主流程保持简洁
    doSomething();
    
  • 优势:减少嵌套层级,逻辑更线性化。

二、使用枚举(Enum)

适用场景:多分支状态映射(如状态码、配置值)。

  • 示例:
    // 优化前
    if ("1".equals(status)) { ... } else if ("2".equals(status)) { ... }
    // 优化后
    public enum StatusEnum {UN PAID("1", "未支付"), PAID("2", "已支付");// 通过枚举直接获取值
    }
    String desc = StatusEnum.of(status).getDesc();
    
  • 优势:集中管理状态,避免冗余判断。

三、Map/字典驱动

适用场景:根据键值对执行不同操作。

  • 示例:
    // 优化前
    if (type == 1) { action1(); } else if (type == 2) { action2(); }
    // 优化后
    Map actions = new HashMap<>();
    actions.put(1, () -> action1());
    actions.getOrDefault(type, () -> defaultAction()).run();
    
  • 优势:动态扩展分支,无需修改原有逻辑。

四、三元运算符(Ternary Operator)

适用场景:简单的二元条件赋值。

  • 示例:
    // 优化前
    int score = 85;
    if (score > 60) {result = "Pass";
    } else {result = "Fail";
    }
    // 优化后
    String result = score > 60 ? "Pass" : "Fail";
    
  • 注意:避免嵌套使用,保持可读性。

五、Optional 处理空值

适用场景:非空判断与默认值处理。

  • 示例:
    // 优化前
    if (order != null) {return order.getId();
    } else {return -1;
    }
    // 优化后
    return Optional.ofNullable(order).map(Order::getId).orElse(-1);
    
  • 优势:链式调用,避免空指针异常。

六、策略模式(Strategy Pattern)

适用场景:多分支逻辑需独立扩展。

  • 示例:
    interface PaymentStrategy {void pay();
    }
    class AlipayStrategy implements PaymentStrategy { ... }
    class WechatPayStrategy implements PaymentStrategy { ... }
    // 使用策略工厂动态选择
    PaymentStrategy strategy = StrategyFactory.create(type);
    strategy.pay();
    
  • 优势:符合开闭原则,新增逻辑无需修改原有代码。

七、表驱动法(Table-Driven Methods)

适用场景:基于配置表的条件映射。

  • 示例:
    // 将条件与操作存入 Map 或数据库
    Map discounts = new HashMap<>();
    discounts.put("SUMMER2023", 0.8);
    discounts.put("BLACKFRIDAY", 0.5);
    double rate = discounts.getOrDefault(code, 1.0);
    
  • 优势:动态配置,降低代码耦合度。

八、正则表达式替代多重判断

适用场景:字符串匹配规则复杂。

  • 示例:
    # 优化前
    if len(password) < 8: return False
    if not any(char.isdigit() for char in password): return False
    # 优化后
    import re
    pattern = r'^.*[0-9].*[A-Za-z].*$'
    return bool(re.match(pattern, password))
    
  • 优势:集中管理匹配规则,减少冗余代码。

九、责任链模式(Chain of Responsibility)

适用场景:多层级处理请求。

  • 示例:
    abstract class Handler {private Handler next;public void setNext(Handler next) { ... }public abstract void handleRequest();
    }
    // 各处理器依次处理请求
    Handler h1 = new Handler1();
    Handler h2 = new Handler2();
    h1.setNext(h2);
    h1.handleRequest();
    
  • 优势:解耦处理逻辑,支持动态添加步骤。

十、合并条件表达式

适用场景:多个条件返回相同结果。

  • 示例:
    // 优化前
    if (city.equals("北京")) return "首都";
    if (city.equals("上海")) return "经济中心";
    // 优化后
    if ("北京".equals(city) || "上海".equals(city)) {return "一线城市";
    }
    
  • 优势:减少重复判断,提升可读性。

注意事项

  1. 避免过度优化:若逻辑简单,保留 if-else 可能更清晰。
  2. 结合设计模式:策略模式、状态模式等适用于复杂业务场景。
  3. 文档与注释:优化后需补充注释,确保团队协作。
    通过上述方法,可显著降低代码复杂度,提升可维护性。具体选择需根据场景权衡,核心原则是 “让代码更易读,而非追求形式上的简洁”。

相关文章:

重构之去除多余的if-else

一、提前返回&#xff08;Guard Clauses&#xff09; 适用场景&#xff1a;当 else 块仅用于处理异常或边界条件时。 优化前&#xff1a;if (isValid) {doSomething(); } else {return; }优化后&#xff1a;if (!isValid) return; // 提前处理异常&#xff0c;主流程保持简洁…...

【Vim】vim的简单使用

文章目录 1. vi的模式2. 按键使用说明2.1 一般命令模式光标移动替换和查找删除/复制/粘贴 2.2 编辑模式插入/替换 2.3 命令行模式保存/退出环境修改 3. vim的缓存4. vim可视区块5. vim多文件编辑6. vim多窗口功能7. vim关键词补全 1. vi的模式 一般命令模式&#xff1a;以vi打…...

【消息队列RocketMQ】一、RocketMQ入门核心概念与架构解析

在当今互联网技术飞速发展的时代&#xff0c;分布式系统的架构设计愈发复杂。消息队列作为分布式系统中重要的组件&#xff0c;在解耦应用、异步处理、削峰填谷等方面发挥着关键作用。RocketMQ 作为一款高性能、高可靠的分布式消息中间件&#xff0c;被广泛应用于各类互联网场景…...

hadoop分布式部署

1. 上传jdk和hadoop安装包到服务器 2. 解压压缩包 tar xf jdk1.8.0_112.tgz -C /usr/local/ tar xf hadoop-3.3.6.tar.gz -C /usr/local/3. 关闭防火墙 systemctl stop firewalld systemctl disable firewalld4. 修改配置文件 core-site.xml、hadoop-env.sh、yarn-env.sh、…...

C++面试题集合(附答案)

C全家桶 C基础 1. C和C有什么区别&#xff1f; 2. C语言的结构体和C的有什么区别&#xff1f; 3. C 语言的关键字 static 和 C 的关键字 static 有什么区别&#xff1f; 4. C 和 Java有什么核心区别&#xff1f; 5. C中&#xff0c;a和&a有什么区别&#xff1f; 6. …...

23种设计模式-结构型模式之装饰器模式(Java版本)

Java 装饰器模式&#xff08;Decorator Pattern&#xff09;详解 &#x1f381; 什么是装饰器模式&#xff1f; 装饰器模式是一种结构型设计模式&#xff0c;允许向一个对象动态添加新的功能&#xff0c;而不改变其结构。 &#x1f9f1; 你可以想象成在原有功能上“包裹”一…...

UE5的BumpOffset节点

BumpOffset 节点的基本概念 本质上&#xff0c;BumpOffset 节点通过扭曲或偏移纹理坐标来创造深度错觉。它基于视角方向和高度信息动态地调整纹理采样位置&#xff0c;使平面表面看起来具有凹凸感。这是一种称为视差映射(Parallax Mapping)的技术的实现。 当你从不同角度观察…...

从跌倒到领跑:北京亦庄机器人马拉松如何改写人机协作未来?

目录 一、当铁骨遇见马拉松精神 二、半马背后的硬核突破 三、赛事背后的科技博弈 四、当机器人走出实验室 跌倒者的荣光 清晨7:30的南海子公园,发令枪响瞬间——20台形态各异的机器人以千奇百怪的姿态冲出起跑线,有的像蹒跚学步的孩童,有的如专业运动员般矫健,更有机器…...

Internet Protocol

一、IP 1. 基本概念 IP定义&#xff1a;IP 是为计算机网络相互连接进行通信而设计的协议&#xff0c;它规定了网络设备如何标识和寻址&#xff0c;以及数据如何在网络中传输和路由。IP作用&#xff1a;主要负责在不同的网络之间转发数据包&#xff0c;使数据能够从源主机准确…...

Android学习之实战登录注册能力

我们可以从本地 Token 存储、时效管理、服务端通知联动、定时器优化四个维度深入展开 一、本地 Token 存储设计&#xff08;基于 SharedPreferences&#xff09; 1. 存储结构优化&#xff08;包含时效性字段&#xff09; // 定义存储类&#xff08;封装SharedPreferences操作…...

【数据可视化-19】智能手机用户行为可视化分析

&#x1f9d1; 博主简介&#xff1a;曾任某智慧城市类企业算法总监&#xff0c;目前在美国市场的物流公司从事高级算法工程师一职&#xff0c;深耕人工智能领域&#xff0c;精通python数据挖掘、可视化、机器学习等&#xff0c;发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…...

基于一致性哈希算法原理和分布式系统容错机制

一、传统取模算法的局限性分析 当使用User ID取模路由时&#xff0c;Pod挂断会导致以下问题&#xff1a; 数据雪崩效应&#xff1a;节点失效后所有请求需要重新计算取模值&#xff0c;导致缓存穿透和服务震荡服务不可用窗口&#xff1a;节点失效期间&#xff0c;原本路由到该节…...

[SpringBoot-1] 概述和快速入门(使用vscode)

1 SpringBoot 概念 SpringBoot提供了一种快速使用Spring的方式&#xff0c;基于约定优于配置的思想&#xff0c;可以让开发人员不必在配置与逻辑业务之间进行思维的切换&#xff0c;全身心的投入到逻辑业务的代码编写中&#xff0c;从而大大提高了开发的效率&#xff0c;一定程…...

学习笔记二十——Rust trait

&#x1f9e9; Rust Trait 彻底搞懂版 &#x1f440; 目标读者&#xff1a;对 Rust 完全陌生&#xff0c;但想真正明白 “Trait、Trait Bound、孤岛法则” 在做什么、怎么用、为什么这样设计。 &#x1f6e0; 方法&#xff1a; 先给“心里模型”——用生活类比把抽象概念掰开揉…...

llama factory

微调大模型可以像这样轻松… https://github.com/user-attachments/assets/e6ce34b0-52d5-4f3e-a830-592106c4c272 选择你的打开方式&#xff1a; 入门教程&#xff1a;https://zhuanlan.zhihu.com/p/695287607框架文档&#xff1a;https://llamafactory.readthedocs.io/zh-…...

机器学习 Day12 集成学习简单介绍

1.集成学习概述 1.1. 什么是集成学习 集成学习是一种通过组合多个模型来提高预测性能的机器学习方法。它类似于&#xff1a; 超级个体 vs 弱者联盟 单个复杂模型(如9次多项式函数)可能能力过强但容易过拟合 组合多个简单模型(如一堆1次函数)可以增强能力而不易过拟合 集成…...

基于 Spring Boot 瑞吉外卖系统开发(五)

基于 Spring Boot 瑞吉外卖系统开发&#xff08;五&#xff09; 删除分类 分类列表中每条分类信息右侧提供了一个“删除”按钮&#xff0c;当需要将已经存在的分类信息删除时&#xff0c;可以通过单击“删除”按钮实现。 请求路径为/category&#xff0c;携带参数id&#xf…...

PyTorch基础笔记

PyTorch张量 多维数组&#xff1a;张量可以是标量&#xff08;0D&#xff09;、向量&#xff08;1D&#xff09;、矩阵&#xff08;2D&#xff09;或更高维的数据&#xff08;3D&#xff09;。 数据类型&#xff1a;支持多种数据类型&#xff08;如 float32, int64, bool 等&a…...

什么是 IDE?集成开发环境的功能与优势

原文&#xff1a;什么是 IDE&#xff1f;集成开发环境的功能与优势 | w3cschool笔记 &#xff08;注意&#xff1a;此为科普文章&#xff0c;请勿标记为付费文章&#xff01;且此文章并非我原创&#xff0c;不要标记为付费&#xff01;&#xff09; IDE 是什么&#xff1f; …...

基于大数据的房产估价解决方案

基于大数据的房产估价解决方案 一、项目背景与目标 1.1 背景 在房地产市场中&#xff0c;准确的房产估价至关重要。传统的房产估价方法往往依赖于估价师的经验和有限的数据样本&#xff0c;存在主观性强、效率低等问题。随着大数据技术的发展&#xff0c;大量的房产相关数据被积…...

基于深度学习的线性预测:创新应用与挑战

一、引言 1.1 研究背景 深度学习作为人工智能领域的重要分支&#xff0c;近年来在各个领域都取得了显著的进展。在线性预测领域&#xff0c;深度学习也逐渐兴起并展现出强大的潜力。传统的线性预测方法在处理复杂数据和动态变化的情况时往往存在一定的局限性。而深度学习凭借…...

WEMOS LOLIN32

ESP32是結合Wi-Fi和藍牙的32位元系統單晶片&#xff08;SoC&#xff09;與外接快閃記憶體的模組。許多廠商生產採用ESP32模組的控制板&#xff0c;最基本的ESP控制板包含ESP32模組、直流電壓轉換器和USB序列通訊介面IC。一款名為WEMOS LOLIN32的ESP32控制板具備3.7V鋰電池插座。…...

VSCode 扩展离线下载方法

学习自该文章&#xff0c;感谢作者&#xff01; 2025 年 VSCode 插件离线下载攻略&#xff1a;官方渠道一键获取 - 知乎 获取扩展关键信息 方法一&#xff1a;官网获取 打开 VSCode 扩展官方网站 搜索要下载的扩展&#xff0c;以 CodeGeeX 为例&#xff0c;网址为&#xf…...

计算机视觉与深度学习 | RNN原理,公式,代码,应用

RNN(循环神经网络)详解 一、原理 RNN(Recurrent Neural Network)是一种处理序列数据的神经网络,其核心思想是通过循环连接(隐藏状态)捕捉序列中的时序信息。每个时间步的隐藏状态 ( h_t ) 不仅依赖当前输入 ( x_t ),还依赖前一时间步的隐藏状态 ( h_{t-1} ),从而实现…...

对于网络资源二级缓存的简单学习

缓存学习 前言认识缓存磁盘储存内存储存磁盘内存组合优化 具体实现WebCacheMD5签名 WebDownloadOperationWebDownloaderWebCombineOperation 总结 前言 在最近的写的仿抖音app中&#xff0c;遇到了当往下滑动视频后&#xff0c;当上方的视频进入复用池后&#xff0c;会自动清空…...

【计量地理学】实验六 地理属性空间插值

一、实验目的 本次实验的主要目的在于熟练掌握空间克里格法插值的理论基础&#xff0c;包括其核心概念和步骤&#xff0c;能够通过数据可视化和统计分析方法识别数据中的异常值&#xff0c;并且掌握数据正态性的检验方法&#xff0c;理解正态分布对克里格法的重要性&#xff0…...

26考研 | 王道 | 数据结构 | 第六章 图

第六章 图 文章目录 第六章 图6.1. 图的基本概念6.2. 图的存储6.2.1. 邻接矩阵6.2.2. 邻接表6.2.3. 十字链表、临接多重表6.2.4. 图的基本操作 6.3. 图的遍历6.3.1. 广度优先遍历6.3.2. 深度优先遍历6.3.3 图的遍历与连通性 6.4. 图的应用6.4.1. 最小生成树6.4.2. 无权图的单源…...

window.addEventListener 和 document.addEventListener

window.addEventListener 和 document.addEventListener 是 JavaScript 中绑定事件的两个常用方法&#xff0c;核心区别在于 绑定的对象不同&#xff0c;导致事件的作用范围、触发时机和适用场景不同。下面用最直白的语言和案例对比说明&#xff1a; 一、核心区别&#xff1a;…...

51单片机的原理图和PCB绘制

51单片机最小系统原理图 加了两个led灯和按键检测电路。 PCB中原件摆放位置 成品 资源链接&#xff1a;https://download.csdn.net/download/qq_61556106/90656365...

kotlin知识体系(五) :Android 协程全解析,从作用域到异常处理的全面指南

1. 什么是协程 协程(Coroutine)是轻量级的线程&#xff0c;支持挂起和恢复&#xff0c;从而避免阻塞线程。 2. 协程的优势 协程通过结构化并发和简洁的语法&#xff0c;显著提升了异步编程的效率与代码质量。 2.1 资源占用低&#xff08;一个线程可运行多个协程&#xff09;…...

数据通信学习笔记之OSPF其他内容3

对发送的 LSA 进行过滤 当两台路由器之间存在多条链路时&#xff0c;可以在某些链路上通过对发送的 LSA 进行过滤&#xff0c;减少不必要的重传&#xff0c;节省带宽资源。 通过对 OSPF 接口出方向的 LSA 进行过滤可以不向邻居发送无用的 LSA&#xff0c;从而减少邻居 LSDB 的…...

Kubernetes相关的名词解释API Server组件(9)

什么是API Server&#xff1f; API Server&#xff08;kube-apiserver&#xff09; 是 Kubernetes 的核心组件之一&#xff0c;负责管理整个集群的通信和操作入口。 API Server 的作用在整个 Kubernetes 集群的正常运作中至关重要&#xff0c;可以说它是整个系统的神经中枢。…...

[密码学实战]密码服务平台部署架构详解与学习路线

密码服务平台部署架构详解与学习路线 引言 在数字化转型的浪潮中,数据安全已成为企业生存的“生命线”。国密算法(SM2/SM3/SM4)作为我国自主研发的密码标准,正在政务、金融、医疗等领域加速落地。然而,构建一套高可用、高性能、合规的密码服务平台,仍需攻克架构设计、性…...

如何成为Prompt工程师:学习路径、核心技能与职业发展

一、什么是Prompt工程师&#xff1f; Prompt工程师是专注于通过设计、优化和调试大语言模型&#xff08;LLM&#xff09;的输入提示词&#xff08;Prompt&#xff09;&#xff0c;以精准引导模型输出符合业务需求结果的技术人才。其核心能力在于将模糊的业务需求转化为结构化、…...

OpenCV 边缘检测(Edge Detection)cv2.Canny

OpenCV 边缘检测&#xff08;Edge Detection&#xff09;cv2.Canny flyfish import cv2video_path input_video.mp4 cap cv2.VideoCapture(video_path)while True:ret, frame cap.read()if not ret:break # 视频结束# 转灰度frame_gray cv2.cvtColor(frame, cv2.COLOR_B…...

【C++】win 10 / win 11:Dev-C++ 下载与安装

目录 一、Dev-C 下载 &#xff08;1&#xff09;sourceforge 官网下载 &#xff08;2&#xff09;腾讯官网下载 二、Dev-C 安装 三、Dev-C 配置 &#xff08;1&#xff09;配置 C11 &#xff08;2&#xff09;配置产生调试信息 &#xff08;3&#xff09;个性化配置…...

2025年MathorCup竞赛助攻资料免费分享

对于本界竞赛B题其中问题需要设计软件框架&#xff0c;对于该问题回答&#xff0c;个人认为可以在设计框架下简单的进行软件展示&#xff0c;下面是初步展示的结果&#xff0c;仅供参考 【问题四&#xff1a;老城区平移置换决策软件设计】规划局希望这个案例能起到示范作用&am…...

征程 6 VIO 通路断流分析

自动驾驶场景中&#xff0c;常见的是多路感知通路&#xff0c;在不考虑应用获取释放帧异常操作的前提下&#xff0c;一般出现帧获取异常的情况&#xff0c;主要原因是通路中某段断流的情况&#xff0c;如何去准确的定位&#xff0c;对大部分客户来说&#xff0c;依赖我司的支持…...

JavaScript 性能优化

JavaScript 性能优化是提高 Web 应用性能的关键步骤,特别是在处理大量数据、复杂计算或频繁的 DOM 操作时。以下是一些常见的 JavaScript 性能优化技巧和策略: 文章目录 @[TOC]一、代码层面优化1. **减少全局变量**2. **避免使用 `with` 语句**3. **使用局部变量**4. **减少 …...

机器学习中的“三态模型“:过拟合、欠拟合和刚刚好

文章目录 说明1. 模型表现的"三国演义"2. 可视化理解&#xff1a;从曲线看状态3. 诊断模型&#xff1a;你的模型"病"了吗&#xff1f;4. 学习曲线&#xff1a;模型的"体检报告"5. 治疗"模型病"的药方 6. 偏差-方差分解&#xff1a;理解…...

在FVM(有限体积法)的CFD仿真中,AI和机器学习的应用

在FVM&#xff08;有限体积法&#xff09;的CFD仿真中&#xff0c;AI和机器学习&#xff08;ML&#xff09;可以通过以下方式显著提高收敛速度与计算效率&#xff0c;具体分为六个方向&#xff1a; 1. 加速非线性迭代收敛 替代传统松弛方法&#xff1a; 使用ML模型&#xff08…...

【21天学习打卡挑战赛】如何学习WEB安全:逼自己在短时间掌握WEB安全核心内容

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…...

网络安全知识点3

1.AES密钥长度可以为128,192,256位,但分组长度为128位 2.DES加密算法的密钥长度为56位,三重DES的密钥长度为112位 3.主动攻击:拒绝服务攻击,分布式拒绝服务DDOS,信息篡改,资源使用,欺骗,伪装,重放,会话拦截 被动攻击:窃听,流量分析,破解弱加密的数据流 4.IPSec可对数据进行…...

力扣每日打卡16 781. 森林中的兔子(中等)

力扣 781. 森林中的兔子 中等 前言一、题目内容二、解题方法1. 哈希函数&#xff08;来自评论区大佬的解题方法&#xff09;2.官方题解2.1 方法一&#xff1a;贪心 前言 这是刷算法题的第十六天&#xff0c;用到的语言是JS 题目&#xff1a;力扣 781. 森林中的兔子 (中等) 一、…...

STM32基础教程——HEX数据包接收

前言 串口&#xff0c;是一种应用范围十分广泛的通信接口&#xff0c;串口的成本较低&#xff0c;容易使用&#xff0c;通信线路简单&#xff0c;可以实现两个设备之间的通信。单片机的串口可以实现单片机与单片机&#xff0c;单片机与电脑&#xff0c;单片机与其他设备的通信…...

【JavaWeb后端开发02】SpringBootWeb + Https协议

课程内容&#xff1a; SpringBootWeb 入门 Http协议 SpringBootWeb案例 分层解耦 文章目录 1. SpringBootWeb入门1.1 概述1.2 入门程序1.2.1 需求1.2.2 开发步骤1.2.3 常见问题 1.3 入门解析 2. HTTP协议2.1 HTTP概述2.1.1 介绍2.1.2 特点 2.2 HTTP请求协议2.2.1 介绍2.2.2…...

基于论文的大模型应用:基于SmartETL的arXiv论文数据接入与预处理(三)

上一篇 介绍了数据接入处理的整体方案设计。本篇介绍基于SmartETL框架的流程实现。 5. 流程开发 5.1.简单采集流程 从指定时间&#xff08;yy年 mm月&#xff09;开始&#xff0c;持续采集arXiv论文。基于月份和顺序号&#xff0c;构造论文ID&#xff0c;进而下载论文PDF文件…...

深入理解Linux中的线程控制:多线程编程的实战技巧

个人主页&#xff1a;chian-ocean 文章专栏-Linux 前言&#xff1a; POSIX线程&#xff08;Pthreads&#xff09; 是一种在 POSIX 标准下定义的线程库&#xff0c;它为多线程编程提供了统一的接口&#xff0c;主要用于 UNIX 和类 UNIX 系统&#xff08;如 Linux、MacOS 和 BS…...

从内核到用户态:Linux信号内核结构、保存与处理全链路剖析

Linux系列 文章目录 Linux系列前言一、信号的保存1.1 信号保存概念引入1.2 信号的阻塞与保存1.2.1 信号其他相关常见概念1.2.2 信号在内核中的表示 二、信号相关接口2.1 signal_t 结构体类型2.2 信号集操作函数 三、信号的处理3.1 进程地址空间信号的检测与处理 总结 前言 Lin…...

【AI图像创作变现】02工具推荐与差异化对比

引言 市面上的AI绘图工具层出不穷&#xff0c;但每款工具都有自己的“性格”&#xff1a;有的美学惊艳但无法微调&#xff0c;有的自由度极高却需要动手配置&#xff0c;还有的完全零门槛适合小白直接上手。本节将用统一格式拆解五类主流工具&#xff0c;帮助你根据风格、控制…...