陈旧语法密度之五——用三元表达式消灭if-else if-else

C语言-条件判断语句(if,三元运算符) 在这个例子中,我们首先定义了一个整型变量num,并将其赋值为-5。If-else if语句:当指定的第一个条件为真时,执行if语句后面的代码块。如果第一个条件为假,则判断第二个条件是否为真,如果为真则执行elseif语句后面的代码块。如果两个条件都为假,则执行else语句后面的代码块。If-else语句:当指定的条件为真时,执行if语句后面的代码块。如果条件为假,则执行else语句后面的代码块。If语句:当指定的条件为真时,执行if语句后面的代码块。如果条件为假,则不执行该代码块。 阅读详情

用三元表达式消灭if-else if-else

前例的三元表达式实现如下:

public String getReversedOperator2() {
    return operator.equals("=")
            ? "!="
            : operator.equals("==")
            ? "!="
            : operator.equals("!=")
            ? "="
            : operator.equals("<")
            ? "!<"
            : operator.equals(">")
            ? "!>"
            : operator.equals("<=")
            ? "!<="
            : operator.equals(">=")
            ? "!>="
            : "?";
}

如果不能当场return,可以如此:

public String getReversedOperator21() {
    String reversedOperator = operator.equals("=")
            ? "!="
            : operator.equals("==")
            ? "!="
            : operator.equals("!=")
            ? "="
            : operator.equals("<")
            ? "!<"
            : operator.equals(">")
            ? "!>"
            : operator.equals("<=")
            ? "!<="
            : operator.equals(">=")
            ? "!>="
            : "?";
    //Do something here.
    return reversedOperator;
}

三元表达式有这样几种优势:

信息密度更大,对应关系更清晰。也就是需要较少的代码,即可完成原来的功能;额外代码的消除,使得代码中的输入输出变得更加清晰(输入是">",输出就是“!<”,等等)。

面向结果,而非过程,从而激发“本能封装”。在if-else if-else结构中,在任何一个分支中,代码可以随时添加,整个方法的长度就失控了。在三元表达式中,每个分支只能是一个值,而不是产生值的一些代码。这就促使人们不得不写一个方法,未来可能会复用。

主流程与分支流程分离。一个if-else if-else结构到底在做什么?可能需要仔细看看才能看清楚;但一个三元表达式就做一件事情:给一个变量赋值,一望而知。而数值的来源,要么一行代码说清楚,要么则抽象成各自的方法。

尽管三元表达式不是面向对象的理念,然而却是非常好的高内聚,低耦合的产物;也是“信息隐匿”的利器。


Win11系统下Notepad++右键菜单失效?3种修复方法实测有效(附注册表备份指南) 本文针对Windows 11系统中Notepad++右键菜单失效的常见问题,提供了三种经过实测有效的修复方法。核心解决方案包括使用官方NppShell.dll重新注册、手动修复注册表项以及系统级问题排查,并详细说明了操作前的注册表备份指南,确保修复过程安全可靠。 阅读详情

相关推荐

单路径微分相除和微分自乘相减算法(PGC-SDD-DSM)

PGC-SDD-DSM算法通过融合单路微分相除和差分自乘,解决了传统PGC解调技术对调制深度和光强干扰敏感的问题,显著提升了解调稳定性和抗失真能力。其高信噪比、低谐波失真以及对参数变化的鲁棒性,使其在光纤传感领域具有重要应用价值。PGC-SDD-DSM算法在计算复杂度方面具有显著的优势,主要体现在其高稳定性和低谐波失真上。这些优势使其在光纤光学干涉传感器中表现出色,尤其是在面对光强干扰和调制深度变化时。

百态·数智思维 | 聚焦大数据、量化与未来AI 841

消除if...else的十种方法

消除if...else的十种方法

jufeng9318的专栏 3283

某手 v8.x 签名计算方法(二) sig和__NS_sig3

一、目标 今天的目标是 sig和__NS_sig3,咱们抓个包先 二、步骤 sig目测像是MD5 先jadx搜索 sig= ,没有找到结果。 再试试 sig ,晕倒 6k多个结果,突然灵光一闪,这些参数,必然是要加入到 Map中,那么我们搜索 "sig" 应该就是这个 CPU.getClock,Hook之 var signCls = Java.use('com.yxcorp.xxx.util.CPU'); signCls.getClock.implementation = function(a,b,c

fenfei331的博客 2428

几种消除if/else的方式

随着项目的越来越复杂,条件分支越来越多,代码充斥着大量的if/else和switch/case判断,甚至是多层嵌套的if/else,我们需要重新重构或者组织逻辑代码。

u012809062的博客 3526

MySQL 优化 - index_merge 导致查询偶发变慢

今天遇到了一个有意思的问题,线上数据库 CPU 出现了偶发的抖动。定位到原因是一条查询语句偶发变慢造成的,随后通过调整表中的索引解决。优化器通过某种机制检测到 index_merge 能带来性能提升,某些情况下不会带来提升,反而会耗费更长的时间,属于优化器的缺陷,可以通过调整表中的索引来解决。

分享既学习 1255

SAP 对接CBS(http方式)

CLEAR:lv_xml_crc32_string. CONCATENATEcrc32_passwordcrc32_keyi_stringINTOlv_xml_crc32_string. CONDENSElv_xml_crc32_string. CALLFUNCTION'SCMS_STRING_TO_XSTRING' EXPORTING text=lv_xml_crc32_string encoding='8400' "GB...

3597

一文搞懂策略模式(优化策略模式完全消除if else)

注重版权,转载请注明原作者和原文链接 作者:码农BookSea 原文链接:https://blog.youkuaiyun.com/bookssea/article/details/107309591 先看后赞,养成习惯。 点赞收藏,人生辉煌。 文章目录前言一、策略模式介绍二、策略模式应用(消除 if else)三、如何对策略模式进行优化总结 前言 策略模式是设计模式里面比较简单的设计模式,其特点简单又实用,是我最喜欢的模式之一。当初学策略模式是因为听说策略模式可以用来消除 if else语句。 多重条件语句.

BookSea的博客 3万+

EU 2021/646 eCall工程拆解:MSD、测试模式与型式核准

紧急呼叫系统(eCall)是车载通信中面向事故救援的安全功能,其原理是在碰撞或人工触发后,通过蜂窝网络向公共安全应答点发送最小数据集(MSD),并建立语音链路。技术价值在于缩短救援响应时间、提升事故后生存率,应用场景覆盖乘用车、轻型商用车及车载T-Box等前装通信模块。面向欧盟市场时,EU 2021/646把eCall从安装要求推进到型式核准测试,关注触发链路、备用电源、GNSS定位、MSD字段、音频质量与回拨能力。工程落地需要围绕测试模式、字段校验、配置管理和送检样件建立可交付合规方案。

weixin_31815843的博客 209

消灭if else

在我们的项目代码中总能看到一些if else这种代码,如果if else 大量出现在我们代码中就会显得特别累赘,代码可读性也很差,那我们该如何去消灭这些丑陋的代码呢,然我们的代码变得优雅且可读性强。 比如,我们在做权限管理系统的时候,不同的角色有不同的操作操作权限,比如角色a可以干嘛干嘛,角色b可以干嘛干嘛。按照我们以前写代码的惯用思维上来就是无脑if else如:...

蜡笔小明的博客 337

危废焚烧优化控制系统设计与实现:基于数据驱动的控制参数预测

本文提出了一种基于数据驱动的危险废物焚烧过程优化控制方法。系统利用历史运行数据和实时监测数据,通过深度学习模型预测关键控制参数,实现焚烧过程的智能化控制。系统采用Python开发,结合TensorFlow/PyTorch框架,构建了完整的数据采集、预处理、特征工程、模型训练和实时预测闭环系统。该系统能够处理多变量非线性关系,适应工况变化,从历史数据中学习最优控制策略,相比传统PID控制方法具有显著优势。论文详细介绍了系统架构、算法设计和实现细节,为危废焚烧过程的优化控制提供了有效解决方案。

huanghm88的专栏 206

科研绘图系列:R语言绘制世界地图数据分布(world map)

科研绘图系列:R语言绘制世界地图数据分布(world map)

专注生信领域 527

彻底消灭if-else嵌套

compute(Double amount):各计费规则的抽象getType():获取枚举中维护的会员级别/*** 计费规则* @param amount 会员的交易金额* @return*//*** 获取会员级别* @return*/两种方案主要参考了设计模式中的策略模式系统中有很多类,而他们的区别仅仅在于他们的行为不同。一个系统需要动态地在几种算法中选择一种。

jjc4261的博客 347

基于STM32的智能血氧、心率、体温、血压监测系统

摘要:本文设计了一款基于STM32F103C8T6的多功能健康监测系统,可实时检测血氧、心率、体温和血压四项生理参数。系统集成MAX30102、DS18B20等传感器模块,采用OLED显示和蓝牙无线传输技术,实现一键血压测量、阈值报警及手机APP数据管理功能。硬件设计包含传感器采集、电源管理、显示报警等模块;软件采用模块化架构,实现数据采集处理、蓝牙通讯等功能。测试表明系统测量准确可靠,为家庭健康监测提供了便携解决方案。未来可扩展更多监测参数和智能分析功能。

3254968421的博客 770

陈旧语法密度之六——用Map消灭if-else if-else,“上帝代码”

用Map消灭if-else if-else尽管三元表达式已经很简洁了,然而仍然不是最优解。此处的最优解是Map:public static final Map&lt;String, String&gt; operator2Revoperators = Map.of( "=", "!=", "==", "!=", "!=", &quo

陈勇的博客 - Scrum 敏捷开发培训咨询,绩效管理,团队管理,《火星人敏捷开发手册》 9651

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

消除业务代码中if....else的五种方式

消费业务代码中if...else的五种方式

自律使我自由 1911

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

满屏的if-else,看我怎么消灭你!

来源:u6.gg/k376d技巧一:提取方法,拆分逻辑技巧二:分支逻辑提前return技巧三:枚举技巧四:函数式接口技巧五:设计模式其他技巧写在最后在实际的业务开发当中,经常会遇到复杂的业...

HollisChuang's Blog 305

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

操作符 3.12 三元操作符 if-else

3.12 三元操作符 if-else 三元操作符也称为条件操作符,它显得比较特别,因为它有三个操作数;但它却是属于操作符的一种,因为它最终也会成为一个值,这与本章下一节中介绍的普通if-else语句是不同的。 其表达式采取下述形式: boolean-exp ?value0 :value1 如果boolean-exp(布尔表达式)的结果为 ...

978

三元运算符和if else

1、三元运算符 ? : 条件?值:值 条件满足(true)则返回第一个值,不满足(false)返回第二个值 int a=100==100? 1000:90; //100是否等于100,等于返回1000,不等于返回90 例: int a=工作年龄>5?30000:20000; 工作年龄是否大于5,如果大于5则给30000工资,否则给20000 System.out.println(100>102?5000:6000); //输出6000 2、if e

qq_43717658的博客 1291

妙用“Function”消灭if...else

在开发过程中经常会使用if…else…进行判断抛出异常、分支处理等操作。这些if…else…充斥在代码中严重影响了代码代码的美观,这时我们可以利用Java 8的Function接口来消灭if…else…。 if (...){ throw new RuntimeException("出现异常了"); } if (...){ doSomething(); } else { doOther(); } 复制代码 Function 函数式接口 使用注解@FunctionalInterfa

CRMEB小程序商城的博客 3168

三元表达式 if elseif案列 switch case breank案列

语法: 条件表达式 ? 值1 : 值2; 当条件表达式为真时,三元表达式结果是值1; 当条件表达式为假时,三元表达式结果是值2; 当结果是二选一时使用三元表达式更简单。 当工作年限不满1年,工资小于8000,年终奖为工资的1倍,否则是1.2倍; 当工作年限不满2年,工资小于10000,年终奖为工资的1.5倍,否则是1.7倍; 当工作年限等于超过2年,工资小于1...

前端小99的博客 881

If else语句与三元运算符

If else语句与三元运算符 开发工具与关键技术:Java 作者:陈希雄 撰写时间:2019/4/15 其实, 三元运算符是if else语句的简写,虽然说是它的简写,但是它自身有些弊端。 三元运算符 格式:(条件表达式)?表达式1:表达式2; • 如果条件为true,运算后的结果是表达式1; • 如果条件为false,运算后的结果是表达式2; 当结果值不确定时不适合用三元运算 简化格式什么时...

weixin_44560342的博客 3818

彻底消灭if-else,你需要这8种方案!

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

spring_root的博客 1276

如何用三元表达式表达两个if----else

this.shareInfo.token ? 1 : this.qrcode ? 1 : 0 if( this.qrcode=1){ this.shareInfo.token==1 }else{ this.shareInfo.token=0 } 对比一下

qq_44170622的博客 1081

三元运算符与if..else

三元运算符与if..else有时能互换,之前总是使用if..else,也不知道他两之间性能怎样。今天做个测试对比一下。package test; public class test { public static void main(String[] args) { Test1(); System.out.println(); Test2(); } private stat...

beyond海阔天空 1509

三元表达式和if-else语句的区别

三元表达式是一个表达式,表达式是有返回值的。1+1是一个表达式,调用有返回值的方法或函数也是一个表达式,比如java中:object.getClass();如果不能返回一个值,则表达式无效,比如false?Sysotem.out.println("a"):Sysotem.out.println("b");但是if-else语句可以执行没有返回值的方法。

3072

三元运算符和if-else语句:不同之处

三元运算符和if-else语句:不同之处。  a) 三元运算符是必须要有返回值,而if-else语句并不一定有返回值,其执行结果可能是赋值语句或者打印输出语句。  b) java三元表达式有字符强转(双目数值提升)的功能,返回值类型为两个返回值中类型精度更高的的那个类型    1) 在java中常见数据类型其范围从小到大(精度由低到高):byte&lt;short&lt;char&lt;int&l...

sinat_34089391的博客 3498
上一篇: 陈旧语法密度之四——用直接删除switch case的方法消除switch case
下一篇: 陈旧语法密度之六——用Map消灭if-else if-else,“上帝代码”
火星人陈勇
博客等级 码龄18年 4899粉丝 381原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值