《重构》:Consolidate Conditional Expression

重点看一下:逻辑与,出现多层if嵌套的情况

实际开发中,与门应该是最容易也是最应该被优化的。

  • 合并后的条件代码会表述“实际上只有一次条件检查,只不过有多个并列条件需要检查,从而使这一次检查的用意更清晰。当然,合并前和合并后的代码有着相同的效果,但原先代码传达出的信息却是“这里有一些各自独立的条件测试,它们只是恰好同时发生”
  • 这项重构往往可以为使用【提炼函数】做好准备。将检查条件提炼成一个独立的函数对于厘清代码意义非常有用,因为它把描述“做什么”的语句换成了“为什么这样做”。

案例一:逻辑或

public int disabilityAmount(Employee anEmployee) {if (anEmployee.seniority < 2) {return 0;}if (anEmployee.monthsDisabled > 12) {return 0;}if (anEmployee.isPartTime) {return 0; // compute the disability amount}
}

这里有一连串的条件检查,都指向同样的结果。既然结果相同,就应该把这些条件检查合并成一条表达式。对这样顺序执行的条件检查,可以用逻辑或运算符合并。

public int disabilityAmount(Employee anEmployee) {if ((anEmployee.seniority < 2) || (anEmployee.monthsDisabled > 12)) {return 0;}if (anEmployee.isPartTime) {return 0;}return 1;
}

然后把下一个条件检查也合并进来:

public int disabilityAmount(Employee anEmployee) {if ((anEmployee.seniority < 2) || (anEmployee.monthsDisabled > 12) || (anEmployee.isPartTime)) {return 0;}return 1;
}

合并完成后,再对这句条件表达式使用【提炼函数】

public int disabilityAmount(Employee anEmployee) {if (isNotEligableForDisability(anEmployee)) {return 0;}return 1;
}public boolean isNotEligableForDisability(Employee anEmployee) {return ((anEmployee.seniority < 2) || (anEmployee.monthsDisabled > 12) || (anEmployee.isPartTime));
}

案例二:逻辑与

例如,嵌套if语句的情况:

public double disabilityAmount(Employee anEmployee) {if (anEmployee.onVacation) {if (anEmployee.seniority > 10) {return 1;}}return 0.5;
}

可以用逻辑与运算符将其合并:

public double disabilityAmount(Employee anEmployee) {if ((anEmployee.onVacation) && (anEmployee.seniority > 10)) {return 1;}return 0.5;
}

如果原来的条件逻辑混杂这两种情况,我也会根据需要组合使用逻辑与和逻辑或运算符。这时,代码很可能变得混乱,所以我会频繁使用【提炼函数】,把代码变得可读。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/594.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

13. Mysql基本操作以及语法

1 数据库基础 1.1 数据库概念和术语 数据库是用于存储和管理数据的系统。它由一组相关数据的集合和用于访问、管理和操作这些数据的软件组成。数据库概念和术语包括以下内容&#xff1a; 数据库管理系统&#xff08;Database Management System&#xff0c;DBMS&#xff09;…

RocketMQ学习笔记(实操篇)

目录 基本操作 启动 测试 双主双从集群搭建 总体架构 工作流程 服务器环境 Host添加信息 防火墙配置 环境变量配置 创建消息存储路径 broker配置文件 修改启动脚本文件 服务启动 查看进程状态 查看日志 mqadmin管理工具 使用方式 命令介绍 集群监控平台搭…

基于深度学习的高精度刀具检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度刀具检测识别系统可用于日常生活中或野外来检测与定位刀具目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的刀具目标检测识别&#xff0c;另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标检测模型…

HTML <meta> 标签

定义和用法 <meta> 元素可提供有关页面的元信息(meta-information),比如针对搜索引擎和更新频度的描述和关键词。 <meta> 标签位于文档的头部,不包含任何内容。<meta> 标签的属性定义了与文档相关联的名称/值对。 浏览器支持 元素ChromeIEFirefoxSafa…

HOT67-寻找旋转排序数组中的最小值

leetcode原题链接&#xff1a;寻找旋转排序数组中的最小值 题目描述 已知一个长度为 n 的数组&#xff0c;预先按照升序排列&#xff0c;经由 1 到 n 次 旋转 后&#xff0c;得到输入数组。例如&#xff0c;原数组 nums [0,1,2,4,5,6,7] 在变化后可能得到&#xff1a; 若旋转…

谈谈——互联网生活中的隐私保护

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

图形编辑器开发:参考线吸附功能,让图形自动对齐

最近我给图形编辑器增加了参照线吸附功能&#xff0c;讲讲我的实现思路。 我正在开发的图形设计工具&#xff1a; https://github.com/F-star/suika 线上体验&#xff1a; https://blog.fstars.wang/app/suika/ 效果是被移动的图形会参考周围图形&#xff0c;自动与它们进行吸附…

MySQl数据库第八课-------SQL命令查询-------主要命脉

作者前言 欢迎小可爱们前来借鉴我的gtiee秦老大大 (qin-laoda) - Gitee.com —————————————————————————————— 目录 查询数据 条件 逻辑运算符 模糊查询 范围查询 in 判断空 UNION 排序 聚合 分组&#xff1a;group by —————————…

c++计算贝塞尔曲线(折线平滑为曲线)坐标方法

效果可查看上一篇博文&#xff1a;js手动画平滑曲线&#xff0c;贝塞尔曲线拟合【代码】js手动画平滑曲线&#xff0c;贝塞尔曲线拟合。https://blog.csdn.net/qiufeng_xinqing/article/details/131711963?spm1001.2014.3001.5502 代码如下&#xff1a; #include <cmath&…

FPGA实验三:状态机的设计

目录 一、实验目的 二、实验要求 三、实验代码 1.design source文件部分代码 2.测试文件代码 四、实验结果及分析 1、引脚锁定 2、仿真波形及分析 &#xff08;1&#xff09;设计好序列检测器 &#xff08;2&#xff09;仿真波形&#xff08;检测11010&#xff09; 3…

【网络系统集成】路由器实验

1.实验名称:路由器RIP协议配置 2.实验目的 在PacketTracer中进行模拟实验,配置RIP协议,验证RIP协议更新时间及路由状态变化,加深对路由器RIP协议相关知识的理解与掌握。 3.实验内容 (1)拓扑结构图 (2)ip地址分配与端口分配

使用matlab随机森林进行数据分类预测

当使用MATLAB进行随机森林数据分类预测时&#xff0c;以下是一般的步骤&#xff1a; 准备数据集&#xff1a;将数据集划分为特征和标签&#xff0c;确保数据集已经清洗并做好特征工程。 拆分数据集&#xff1a;将数据集分为训练集和测试集。训练集用于建立随机森林模型&#x…

linux - bc 命令安装

一.引言 迁移新机器后发现没有 bc 命令&#xff0c;之前 shell 脚本的一些计算逻辑会出错&#xff0c;下面快速安装一下。 二.安装 bc 请确保在 root 权限下执行该命令&#xff1a; sudo yum install bc 出现下述界面即安装成功&#xff1a; 三.测试 bc 测试下脚本里 % 的…

快速小巧的粘贴应用程序Hasty Paste

什么是 Hasty Paste? Hasty Paste 是一个快速粘贴文本并共享的地方&#xff0c;主要用于共享调试日志等&#xff0c;以帮助开发人员提供技术支持。该项目的目标是既快又小。 命令行安装 在群晖上以 Docker 方式安装。 官方的镜像没有发布在 docker hub&#xff0c;而是在 gh…

csdn签到的方法

一、手机版 点击下方蓝色文字链接即可。 签到链接&#xff08;点击此处即可&#xff09; 二、电脑版 打开个人中心&#xff0c;单击头像&#xff0c;点击签到抽奖即可。 你学会了吗&#xff1f;&#xff1f;&#xff1f;

Huggingface pipline使用

pipline是Huggingface的一个基本工具&#xff0c;可以理解为一个端到端(end-to-end)的一键调用Transformer模型的工具。它具备了数据预处理、模型处理、模型输出后处理等步骤&#xff0c;可以直接输入原始数据&#xff0c;给出预测结果&#xff0c;十分方便。 1.文本分类 fro…

二级分销小程序怎么做

【二级分销小程序功能介绍】 二级分销小程序是一款专门为企业提供分销管理的移动应用程序。它的主要功能包括商品管理、订单管理、分销设置、分销商等级、分销佣金、分销海报等方面&#xff0c;下面我们逐一进行介绍&#xff1a; 1. 商品管理&#xff1a; 二级分销小程序可以…

尚医通04:Axios Node Npm bable webpack+前端工程改造

目录 本日学习 内容介绍 Axios Node NPM包管理器 Babel 模块化 Webpack 搭建前端工程 前端框架介绍 前端开发过程介绍 登录改造成本地接口 本日学习 1. 了解Axios :他是异步请求用的&#xff0c;前后端。 用于在浏览器和 Node.js 中发送 HTTP 请求。它支持从服务器…

[桌面运维] 显示器 色准,色域,色深,分辨率,带宽,刷新率的基本概念,图像呈现的基本原理

⬜⬜⬜ &#x1f430;&#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea;(*^▽^*)欢迎光临 &#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea;&#x1f430;⬜⬜⬜ ✏️write in front✏️ &#x1f4dd;个人主页&#xff1a;陈丹宇jmu &am…

redis 设置expire=0和直接调用delete删除key的区别

背景 问题起源于生产上应用redis做的一个临时缓存的场景&#xff0c;调用方首先调用某个容器的生成接口&#xff0c;该接口会生成临时缓存的数据放到redis中&#xff0c;然后调用方在调用获取数据内容的接口从任何一台容器中获取放置在redis中的临时数据。 还原问题场景 由于…