精简代码之帮if-else瘦身

用 return“瘦身“if-else:让代码少嵌套、好维护 本文介绍如何用 return 语句优化多层嵌套的 if-else 条件判断。通过"卫语句"模式提前返回不满足条件的情况,使代码更扁平化、逻辑更清晰。 阅读详情

相信大家在平时的开发过程中一定没法避免if-else分支结构的使用,有些时候确实无法避免,但有一些特定的场合我们可以合理的运用一些技巧来对给代买瘦身,本文列举了四种可行的方式,当然还有很多其他的场合或者方式,欢迎大家在评论区补充:
在这里插入图片描述

1- 卫语句(提前return)

卫语句(Guard clause)指的是在遇到异常情况时,提前进行抛出,这在一定程度上可以减少if-else分支结构的使用,可以在逻辑性和代码简洁性上得到提高

在阿里巴巴与Java社区开发者制定的《Java开发手册(华山版)》中有对控制语句的编程规约有如下的建议:

表达异常的分支时,少用if-else方式,这种方式可以改写成:

if (condition) {
...
return obj;
}
// 接着写else的业务逻辑代码;

说明:如果非使用if()…else if()…else…方式表达逻辑,避免后续代码维护困难,【强制】请勿超过3层。
正例:超过3层的 if-else 的逻辑判断代码可以使用卫语句、策略模式、状态模式等来实现,其中卫语句即代码逻辑先考虑失败、异常、中断、退出等直接返回的情况,以方法多个出口的方式,解决代码中判断分支嵌套的问题,这是逆向思维的体现。
示例如下:

public void findBoyfriend(Man man) {
    if (man.isUgly()) {
    System.out.println("本姑娘是外貌协会的资深会员");
    return;
}
if (man.isPoor()) {
    System.out.println("贫贱夫妻百事哀");
    return;
}
if (man.isBadTemper()) {
    System.out.println("银河有多远,你就给我滚多远");
    return;
}
	System.out.println("可以先交往一段时间看看");
}

再来看下面这段代码,在条件为真的情况下我们执行相关的业务代码,否则抛出异常

void Demo(...)
{
    if (true_to_continue){
        ... //业务代码
    }
    else{
        throw new SomeException();
    }
}

如果,我们将if内的条件进行反转之后,同样的功能,但是我们减少了else的使用

void Demo(...)
{
    if (!true_to_continue){
        throw new SomeException();
    }
     ... //业务代码
}

2- map映射

比如我们将英文单词转为化为对应的数字,如果用if-else分支结构可能会写成下面的代码:

int ConvertStr2Num(string strin){
    if(strin == "one") return 1;
    else if(strin == "two") return 2;
    else if(strin == "three") return 3;
    //其余的情况...
    return 0;
}

这样看起来我们的代码会显得很冗长,在C++里面我们可以借助map来实现,即我们预先将逻辑分支的信息存储到map中,之后通过对键值的读取来获得相应的输出

int ConvertStr2Num(string strin) {
    static const map<string, int> wordmap = {
        {"one", 1},
        {"two", 2},
        {"three",3}
        // 其余的情况...
    };
    const auto result = wordmap.find(strin);
    if (result == wordmap.end())   return 0;
    return result->second;
}

当然对于map这样键值对应的特性,我们也可以使用数组或者结构体等来实现相同的功能

3- 三元运算符

三元运算符使用的基本结构如下

[条件语句] ? [表达式1] : [表达式2]

这个大家可能都比较熟悉了,比如比较两个数的大小的时候可以为了简化if-else分支结构采用三元运算符进行替换,这里还值得注意的是,如果结合宏函数使用效果可能更好

#define MAX(a,b) (((a)>(b))?(a):(b))

4-利用继承和多态

对于减少if-else分支结构的使用的方法不得不提的就是面向对象的编程

关于小猫小狗的一段程序如下

if (animal.IsDog){//狗
    animal.EatCookie();
    animal.Bark();
}
else {//猫
    animal.EatFishs();
    animal.Meow();
}

在面向对象的编程过程中,我们只关心接口是什么,具体的实现我们并不关心,所以我们可以创建两个子类分别表示Cat和Dog,具体的实现方法放在子类中完成

class Animal {
public:
    virtual void makeSound();
    virtual void Eat();
};

class Cat: public Animal {
public:
    void makeSound() {
        cout<<"meow"<<endl;
    }
};

class Dog : public Animal {
public:
      void makeSound() {
        cout<<"bark"<<endl;
      }
};

最后,愿你我都可以写出优雅的代码!

告别if-else!用SVA断言给你的SystemVerilog验证代码做个大瘦身 本文探讨了如何利用SystemVerilog Assertions (SVA) 重构验证代码,替代传统的if-else语句,提升验证效率和代码简洁性。SVA断言通过声明式语法简化复杂时序检查,结合功能覆盖率收集,显著优化验证流程。文章详细介绍了模块化断言设计、断言工厂模式以及调试技巧,帮助验证工程师实现代码瘦身和性能提升。 阅读详情

相关推荐

Django基础教程(六十五)Django通用视图之UpdateView:别再用if else了!Django UpdateView:让你代码瘦身,摸鱼时间翻倍的秘密武器!

还在手动处理对象更新?Django 的 UpdateView 通用视图让你告别重复劳动!这篇深度解析带你像老朋友一样认识它,从核心原理到实战示例,手把手教你如何用几行代码搞定复杂的数据更新逻辑。掌握它,让你的开发效率直接起飞,代码更优雅,摸鱼时间更多!🚀

jxf_jxfcsdn的博客 515

【详解】什么是卫语句?作用是什么?

1.什么是卫语句 卫语句就是把复杂的条件表达式拆分成多个条件表达式,减少嵌套。嵌套了好几层的if - then-else语句,转换为多个if语句,实现它的逻辑,这多条的if语句就是卫语句。 卫语句将某些关键条件优先判断,简化程序流程走向。卫语句往往用于对 if 条件嵌套代码的优化。 在《阿里巴巴Java开发手册》中强制规定:超过 3 层的 if-else 的逻辑判断代码可以使用卫语句、策略模式、状态模式等来实现,其中卫语句即代码逻辑先考虑失败、异常、中断...

CodingLJ 3万+

Python打包exe优化指南:从依赖瘦身到启动加速

在软件分发领域,将脚本语言程序打包为独立可执行文件是常见的需求,Python的PyInstaller等工具为此提供了便利。其原理是将Python解释器、依赖库和源代码一同封装,形成一个自包含的运行环境。这种打包方式的技术价值在于实现了跨平台部署和免环境配置,极大简化了程序分发流程。然而,这也带来了exe文件体积庞大和启动缓慢的典型问题,尤其在依赖复杂库(如pandas、PyQt5)或使用单文件模式时更为明显。通过依赖管理、打包参数调优和代码级优化,开发者可以显著改善这些问题。本文聚焦于PyInstaller

congsikuai0611的博客 409

什么是卫语句

什么是卫语句   卫语句是一种改善嵌套代码的一种代码。将经过多级嵌套的代码使用卫语句优化之后的代码嵌套层数降低,因此改使用卫语句能降低代码的复杂程序。   卫语句往往用于对 if 条件嵌套代码的优化。比如,下面的 Java 代码的嵌套层数是 3(方法本身也算一层)。 public int fun(boolean isTrue, int aPara, int bPara) { if (isTrue) { // TODO if (aPara > 0) { return aPara

暗诺星刻的博客 2万+

Java中的卫语句

在Java中,“卫语句”(guard statement)是一种用于在代码执行之前检查条件的控制语句。它们通常与条件语句(如if语句)结合使用,用于提前终止代码块的执行。卫语句的作用是在代码执行之前检查一些前提条件,如果这些条件不满足,则立即跳出当前代码块,避免执行后续的代码。这样可以提高代码的可读性和可维护性,同时减少不必要的计算或错误情况的发生。return;// 卫语句:如果num小于0,则立即跳出方法// 执行一些针对正数的处理逻辑。

舒一笑的博客 2240

阐述 Vue 3 编译器如何识别和优化 `v-if` 和 `v-else-if` 链,生成更简洁的条件渲染代码。

简单来说,Block 就是 Vue 3 在编译时,把模板中静态的部分和动态的部分分离开来,然后把动态的部分组织成一个个独立的 Block。链,Vue 3 编译器会把它识别为一个特殊的 Block,并且使用一种叫做 "bail" 的优化策略。分支中的某些节点是静态的,Vue 3 编译器会把它们提升到渲染函数之外,从而减少渲染开销。说了这么多理论,咱们来几个实际的案例,看看怎么才能更好地利用 Vue 3 编译器的优化特性。,Vue 3 编译器会尝试把这些重复的节点提取出来,然后只根据条件来选择不同的文本内容。

weixin_41455464的博客 668

编程技巧大揭秘:如何使用卫语句改善代码结构

本文主要介绍了什么是卫语句,以及如何通过使用卫语句改善代码结构。

【活用数据】 2081

博途WinCC多语言项目配置指南

在博途(TIA Portal)中为WinCC项目配置多语言功能,需通过系统化步骤实现界面文本的动态切换。

dhaimo的博客 2473

卫语句:简化条件逻辑的有效方法

文章目录卫语句示例1示例2总结 卫语句 在代码中存在过多条件语句的时候,建议把多层条件语句改为卫语句或其他方式 推荐尽量少用else, if-else的方式可以改写成: if(condition){ ... return obj; } // 接着写else的业务逻辑代码; 卫语句就是把复杂的条件表达式拆分成多个条件表达式,比如一个很复杂的表达式,嵌套了好几层的if - then...

Clear Code 6804

通过ssh进行宇树g1机器人进行连接

原因:就是g1机器人输出接口损坏,无法连接外部显示器。前期准备:本文电脑是联想Y7000p(windows)2.进入页面后:3.出现是一个压缩包,解压后:4.安装时:要注意,需要在文件夹中找到这个文件目录,然后在此鼠标右键开启终端进行安装:接着按照提示next下去即可,可以自定义安装路径。

m0_72207463的博客 1288

如何设计一个处理物联网设备数据流的后端系统。

设计一个处理物联网设备数据流的后端系统,需要综合考虑设备数据采集、传输、处理、存储等多个方面,保证系统能够处理海量数据,具备高可用性、扩展性和安全性。合理选择适当的技术架构和工具(如MQTT、Kafka、InfluxDB等),并确保系统能够灵活应对不断变化的业务需求和设备接入。

weixin_53227829的博客 839

减少代码中臃肿的if-else

这里写自定义目录标题减少代码中臃肿的if-else 减少代码中臃肿的if-else 转载 https://blog.youkuaiyun.com/u011635492/article/details/85043793

夜空中最亮的星 152

Materials Studio实战技巧(八)——利用片段库高效构建有机金属配合物

本文详细介绍了在Materials Studio中利用Fragment Browser(片段浏览器)高效构建有机金属配合物的实战技巧。通过调用预置的Metal Templates和Ligands库,用户可以快速搭建如茂金属催化剂等复杂分子骨架,并利用对称性操作精确控制Meso与Rac构型。文章还涵盖了自定义片段库的创建与使用,能显著提升建模效率,适用于计算化学与材料模拟领域的研究者。

wine的专栏 936

iOS中UIViewController完美瘦身

对于UIViewController瘦身是一个老生常谈的问题,现在也有比较多的架构来实现此效果,比如MVVM等等。不过这次我们是对于传统的MVC架构设计实现完美的瘦身。此方法也完全不妨碍在此基础上使用MVVM等其他方法瘦身。 情景 首先让我们看一下我们要做的界面效果 看着界面不是很难,最上边是二维码扫描;中间输入一些信息,数字1、2、3是按钮点击网络请求然后弹出选择界面供用户选择;...

马甲包开发审核交流群:869685378 357

Happycapy深度解析:AI智能体的“iPhone时刻“来了?

从理论到实践深度解析了融合OpenClaw和ClaudeCode优点的超强智能体工具Happycapy

program哲学 457

AI系统架构原理与代码实战案例讲解

人工智能的概念可以追溯到上世纪50年代,图灵测试的提出标志着人工智能作为一门学科的诞生。早期的研究主要集中在符号推理、专家系统等领域,取得了一些突破,例如机器定理证明、西洋跳棋程序等。上世纪80年代,随着专家系统的兴起,人工智能进入了一个黄金时期。专家系统通过模拟人类专家的知识和经验进行推理和决策,在医疗诊断、故障诊断等领域取得了成功应用。进入90年代,由于计算能力的限制和数据量的不足,人工智能的发展陷入低谷。近年来,随着深度学习技术的突破、大数据的兴起以及计算能力的提升,人工智能迎来了第三次发展浪潮,在图

AI天才研究院 1794

利用策略模式优化过多 if else 代码

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33834910的博客 109

高通Camx功能feature分析之一:remosaic功能导通

本文详细介绍了S5K3P9S传感器前置场景中SW Remosaic功能的实现流程。首先需在sensorxml中确认支持SW Remosaic类型,并集成remosaic相关库文件(libremosaic_wrapper.so等)。核心实现包括:初始化阶段调用InitFrontSamsungRemosaic();执行线程DeferFrontInitThread()读取校准数据;通过DoSamsungRemosaic()执行remosaic算法处理;最后在析构函数中调用DeinitFrontSamsungRem

1700

嵌入式代码救命术:数据驱动编程让if-else退!退!退!

嵌入式数据驱动编程摘要 数据驱动编程通过将逻辑与数据分离,大幅提升嵌入式代码质量。传统方式使用大量if-else/switch硬编码逻辑,导致代码臃肿、维护困难。数据驱动则通过配置表管理选项,让数据决定程序行为。其四大优势包括代码精简、易于扩展、维护简单和配置灵活。 典型应用如协议解析器:传统方式重复编写消息处理逻辑,而数据驱动方法定义协议模板后,只需在配置表添加新条目即可扩展功能,核心逻辑保持稳定。三个核心设计原则是:1)数据与逻辑分离 2)外部化配置 3)采用表驱动法优化查询。这种方法使嵌入式代码更优雅

宋一平工作室 744

【FISCO BCOS】二十、多机部署区块链

实际开发中,为了满足高可用性和高容错性的需求,往往会采用多级部署区块链的方式,今天介绍一下FISCO BCOS的多机部署流程。

naihe_fish的博客 3655

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

iOS架构思想:UIViewController瘦身

iOS架构思想:UIViewController的瘦身 前言 这篇文章里会涉及如下几个方面:: 代码的组织结构,以及为何要这样写。 那些场景适合使用子控制器,那些场景应该避免使用子控制器? 分离UITableView的数据源和UITableViewDataSource协议 *MVVM的重点是ViewModel,不是响应函数式。 MVVM中,ReactiveCocoa或RXSwift实现数据...

yeyu_wuhen的博客 532

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

LLM服务架构蒸发:Anthropic零层协议栈瘦身实践

在大模型应用开发中,'LLM Orchestration Layer'曾被广泛用于实现智能路由、动态降级与安全校验,但其引入的延迟、显存开销与请求失败率正成为性能瓶颈。随着gRPC over QUIC、WASM客户端固化、eBPF内核态处理等技术成熟,行业正从‘服务端运行时决策’转向‘客户端编译时确定性’范式——即通过协议栈瘦身、Header净化与逻辑下沉,将中间层物理蒸发。这种‘零层’设计不仅降低P99延迟与GPU资源消耗,更重构了可观测性、安全边界与成本模型,适用于所有依赖LangChain、Llama

weixin_30514745的博客 358

老版QQ原生表情gif动态

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

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Electron应用体积优化实战:从依赖清理到打包瘦身全攻略

在桌面应用开发领域,跨平台框架因其高效开发体验备受青睐。其核心原理在于整合浏览器内核与Node.js运行时,实现Web技术构建原生应用的能力。这一架构带来了显著的开发效率提升和跨平台一致性,技术价值体现在快速迭代和代码复用上。然而,这种便利性也带来了应用体积膨胀的挑战,尤其在资源受限或网络不佳的场景下,过大的安装包会影响分发效率和用户体验。针对这一普遍痛点,本文聚焦于Electron应用的体积优化,通过系统性的瘦身策略,如依赖审计、Tree Shaking、代码分割及ASAR归档等工程实践,有效解决应用“发

weixin_34099526的博客 516

SpringBoot+Vue智能瘦身系统开发实践

个性化健康管理系统通过算法分析用户数据生成定制方案,是当前健康科技领域的重要应用。基于SpringBoot和Vue的技术架构,系统实现了用户画像分析、智能饮食推荐等核心功能。SpringBoot提供稳定的后端服务,Vue构建交互友好的前端界面,结合MySQL数据库存储用户健康数据。关键技术包括基础代谢率计算、营养算法模型等,可应用于健身工作室、健康管理平台等场景。该系统实测用户三个月平均减重效果提升37%,展示了健康科技与工程实践的结合价值。

weixin_33796205的博客 759

Go语言if语句设计哲学与工程实践指南

if语句是编程中最基础的控制结构,其语法设计直接影响代码可读性、维护性与运行时性能。从C/Java惯性思维出发,Go通过省略圆括号、强制花括号、块级作用域变量声明等机制,重构了条件判断的语义重心——从‘语法正确’转向‘意图清晰’。这种设计降低了认知负荷,提升了静态可分析性,并天然支持错误处理隔离与并发安全。在高并发微服务、金融风控、实时竞价等对可靠性与性能敏感的场景中,合理运用Go的if特性(如初始化语句、分支顺序优化、副作用分离)能显著减少NPE、竞态与逻辑误判。本文深入解析Go if语句背后的工程权衡与

weixin_34098209的博客 275

用策略模式解耦rabbitmq的消费者

前言 网上充斥着各种rabbitmq的工具类, 只是简单的说明了使用方法, 并没有对代码进行优化, 当真正应用到系统中时, 各种if-else的逻辑填满了整个工具类, 臃肿又庞大. 我们来对其瘦身. 代码 策略模式是用的比较多的设计模式, 主要应对的情况就是if-else. 首先是准备好的工具类, 不包含业务逻辑: @Configuration @EnableApolloConfig public...

weixin_39417722的博客 393
上一篇: 参考答案+实验设计与分析(第6版) [Design and analysis of experiments] - 蒙哥马利(Montgomery D.C)
puthon
博客等级 码龄11年 173粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值