- 浏览: 69654 次
- 性别:
- 来自: 杭州
-
文章分类
最新评论
-
bo_hai:
assembly:single 不包含源代码,只包含依赖的cl ...
关于创建可执行的jar文件 -
lsy:
相当详细的好文!
关于创建可执行的jar文件 -
steven0lisa:
学习了。不过在有动态代码生成的项目中,就要谨慎用了。
Hide Method(隐藏方法) -
steven0lisa:
好久没看源代码了,没记错的话,因为是由以下原因造成的:1.ke ...
编码最佳实践系列之二 -
steven0lisa:
最后一点确实很有艺术,学习了~~~
编码最佳实践系列之一
WHAT
双重否定的条件语句,可以使用一个肯定的条件语句代替
记住:双重否定 = 肯定
本次重构涉及到的基本重构手法:
- Extract Method(提炼方法)
- Inline Method(内联方法)
- Substitute Algorithm(替换算法)
WHEN
双重否定,虽然机器能够很好理解并正确执行,但是不符合人的自然语言习惯,且令人迷惑,降低代码可读性
HOW
重构前的代码
package remove.doubles.negative; public class SomeClass { private boolean found = false; public boolean isNotFound() { return !found; } public void someMethod() { if (!isNotFound()) { // double negative // do something } } public void someMethod2() { if (isNotFound()) { // negative // do something else } } }
重构步骤
- 提炼肯定条件方法:选中否定条件方法中的肯定部分(如果现在没有,替换算法,杜撰一个),使用快捷键(Alt + Shitf + M)或者上下文菜单(Refactor -> Extract Method ... ),弹出” Extract Method“对话框
- 方法名取名为:isFound,并选择Access Modifier为public,提取函数之后的代码
package remove.doubles.negative; public class SomeClass { private boolean found = false; public boolean isNotFound() { return !isFound(); } public boolean isFound() {// extracted positive conditional method return found; } public void someMethod() { if (!isNotFound()) { // double negative // do something } } public void someMethod2() { if (isNotFound()) { // negative // do something else } } }
- 针对每一个双重否定条件,将双重否定改为肯定
- 先内联否定条件方法:在调用处,选择否定条件,使用快捷键(Alt + Shit + I)或者上下文菜单(Refactor -> Inline...),弹出“Inline Method”对话框,选择“Only the selected invocation”
- 重构后的代码
- 先内联否定条件方法:在调用处,选择否定条件,使用快捷键(Alt + Shit + I)或者上下文菜单(Refactor -> Inline...),弹出“Inline Method”对话框,选择“Only the selected invocation”
package remove.doubles.negative; public class SomeClass { private boolean found = false; public boolean isNotFound() { return !isFound(); } public boolean isFound() {// extracted positive conditional method return found; } public void someMethod() { if (!!isFound()) { // double negative, after inline method // do something } } public void someMethod2() { if (isNotFound()) { // negative // do something else } } }
-
- 替换算法,把双重否定改为肯定
package remove.doubles.negative; public class SomeClass { private boolean found = false; public boolean isNotFound() { return !isFound(); } public boolean isFound() {// extracted positive conditional method return found; } public void someMethod() { if (isFound()) { // changed double negative to positive // do something } } public void someMethod2() { if (isNotFound()) { // negative // do something else } } }
- 最后,如果否定条件方法isNotFound(),没有调用,使用隐藏方法(Hidden Method),或者只有少数几个调用,使用内联方法:Inline method
- 选中
isNotFound方法,
使用快捷键(Alt + Shit + I)或者上下文菜单(Refactor -> Inline...),弹出“Inline Method”对话框,选择“All invocations”,并选择“Delete method declaration”
- 选中
isNotFound方法,
使用快捷键(Alt + Shit + I)或者上下文菜单(Refactor -> Inline...),弹出“Inline Method”对话框,选择“All invocations”,并选择“Delete method declaration”
重构后的代码
package remove.doubles.negative; public class SomeClass { private boolean found = false; public boolean isFound() {// extracted positive conditional method return found; } public void someMethod() { if (isFound()) { // changed double negative to positive // do something } } public void someMethod2() { if (!isFound()) { // changed negative to use not positive // do something else } } }
发表评论
-
Encapsulate Classes with Factory(用工厂封装类)
2012-09-09 16:57 0TODO -
Compose Method(组合方法)
2012-09-09 16:55 0就是Extract Method()的运用 -
Chain Constructors(链构造函数)
2012-09-09 16:53 0同一个类中的各个构造函数,存在重复代码 做法 -
Substitute Algorithm(替换算法)
2012-09-09 14:30 0Substitute Algorithm -
Split Temporary Variable(分解临时变量)
2012-09-09 14:29 0Split Temporary Variable -
重构《Split Loop(分解循环)》
2012-09-12 00:26 1557WHAT 在循环中,一次循环做了两件事情,将循环分解,重复这 ... -
Separate Query from Modifier(将查询方法与修改方法分离)
2012-09-09 14:28 0Separate Query from Modifier ... -
Self Encapsulate Field(自封装字段)
2012-09-09 14:27 0Self Encapsulate Field -
Reverse Conditional(颠倒条件表达式)
2012-09-11 00:00 1259WHAT 如果只有一个then,而没有else的分支条件表达 ... -
Replace Type Code with Subclasses(用子类代替类型码)
2012-09-09 14:25 0Replace Type Code with Subcl ... -
Replace Type Code with State/Strategy(用 State/Strategy代替类型码)
2012-09-09 14:24 0State/Strategy -
Replace Type Code with Class(用类代替类型码)
2012-09-09 14:23 0Replace Type Code with Class ... -
Replace Temp with Query(用查询方法代替临时变量)
2012-09-09 14:23 0Replace Temp with Query -
Replace Subclass with Fields(用字段代替子类)
2012-09-09 14:22 0Replace Subclass with Fields ... -
Replace Static Variable with Parameter(用参数代替静态变量)
2012-09-09 14:21 0Replace Static Variable with ... -
Replace Recursion with Iteration(用迭代代替递归)
2012-09-09 14:20 0Replace Recursion with Itera ... -
Replace Record with Data Class(用数据类代替记录)
2012-09-09 14:19 0Replace Record with Data Cla ... -
Replace Parameter with Method(用方法代替参数)
2012-09-09 14:19 0Replace Parameter with Metho ... -
Replace Parameter with Explicit Methods(用显示方法代替参数)
2012-09-09 14:18 0Replace Parameter with Expli ... -
Replace Nested Conditional with Guard Clauses(用守卫语句代替嵌套条件语句)
2012-09-09 14:17 0Replace Nested Conditional w ...
相关推荐
Remove Double Negative (去除双重否定) - **定义**:识别并去除代码中的双重否定。 - **目的**:提高代码的清晰度。 - **适用场景**:当发现代码中有双重否定的表达时,应考虑去除。 ##### 27. Remove God ...
Remove Double Negative (移除双重否定)** 移除双重否定是指去除代码中的双重否定逻辑,以简化条件表达式。这种方式有助于提高代码的可读性。 **27. Remove God Classes (移除上帝类)** 移除上帝类是指重构那些...
蓝桥杯python-14. continue 继续循环——继续,前进!.py
基于TMS320F28035图形化开发的整流套件:高效、便捷的Simulink直接开发解决方案,基于TMS320F28035图形化开发的整流套件:高效、便捷的Simulink直接开发解决方案,基于tms320f28035图形化开发的整流套件,可用simulink直接开发哦 ,基于TMS320F28035;图形化开发;整流套件;Simulink直接开发,基于TMS320F28035的整流套件,支持图形化开发及Simulink直接开发
Simulink三相电机短路故障动态仿真研究——基于Matlab的实践探索,Simulink三相电机短路故障仿真研究:MATLAB下的模拟分析与保护策略探索,Simulink 三相电机短路故障仿真 [matlab3] ,Simulink;三相电机;短路故障;仿真;Matlab3,Simulink三相电机短路故障仿真研究:基于Matlab的故障模拟分析
毕业设计
风力发电概率潮流计算:基于蒙特卡洛方法的双馈风电机模型及其文献研究,风力发电概率潮流计算:基于蒙特卡洛方法与双馈风电机模型的威布尔分布研究文献综述,风力发电概率潮流计算 蒙特卡洛方法计算概率潮流,满足威布尔分布,双馈风电机模型,有对应的文献资料。 ,风力发电; 概率潮流计算; 蒙特卡洛方法; 威布尔分布; 双馈风电机模型; 文献资料,蒙特卡洛模拟风力发电概率潮流计算,威布尔分布双馈模型分析
家庭微网优化模型matlab实现:基于粒子群算法的空调气温调节优化方案,家庭微网优化模型matlab:基于粒子群算法的空调气温调节优化研究,家庭微网优化模型matlab 考虑家庭电器设备的微网优化模型,采用matlab编程,采用粒子群算法,模型考虑空调的气温调节作用,有相应参考资料。 ,家庭电器设备微网优化模型; 粒子群算法; 空调气温调节作用; MATLAB编程; 参考资信。,基于粒子群算法的家庭电器微网优化模型研究(Matlab实现)
数学建模相关主题资源2
这个是完整源码 SpringBoot + vue 实现 【java毕业设计】微信小程序(校园)二手交易系统(uni-app+SpringBoot后端+Vue管理端) 源码+sql脚本+论文 完整版 数据库是mysql 当今社会已经步入了科学技术进步和经济社会快速发展的新时期,国际信息和学术交流也不断加强,计算机技术对经济社会发展和人民生活改善的影响也日益突出,人类的生存和思考方式也产生了变化。传统高校二手商品交易采取了人工的管理方法,但这种管理方法存在着许多弊端,比如效率低下、安全性低以及信息传输的不准确等,同时由于高校二手商品交易中会形成众多的个人文档和信息系统数据,通过人工方法对二手物品、二手交易、校园论坛等进行集中管理会形成检索、更改和维护等较为麻烦的管理问题,同时由于广大用户对网络技术的需求也日益高涨,于是信息技术也需要继续开展全新的改革以满足时代的需求。根据此问题,研发一套高校二手商品交易平台,既能够大大提高信息的检索、变更与维护的工作效率,也能够方便微信小程序的管理运用,从而减少信息管理成本,提高效率。 该高校二手商品交易平台采用Uni-weixin、SpringBoot架
MATLAB Simulink下的四旋翼无人机PID控制仿真模型研究,MATLAB Simulink下的四旋翼无人机PID控制仿真模型研究,MATLAB Simulink 四旋翼仿真模型 四轴无人机PID控制 ,MATLAB; Simulink; 四旋翼仿真模型; 四轴无人机; PID控制,MATLAB Simulink四旋翼仿真模型中四轴无人机的PID控制研究
盛世名城小区疫情防控系统,在系统首页可以查看首页,新闻动态,疫苗研发,地区疫苗,物资信息,疫情动态,个人信息,后台管理等内容,并进行详细操作
vb屏蔽关闭、最大化、最小化按钮
毕业设计
滚动轴承故障诊断技术:MATLAB下的快速谱峭度与包络谱分析应用,滚动轴承故障诊断技术:MATLAB下的快速谱峭度与谱峭度+包络谱分析方法应用,滚动轴承故障诊断MATLAB程序:快速谱峭度、谱峭度+包络谱分析 滚动轴承故障诊断是机械工程领域的一个重要研究方向。滚动轴承是一种常见的机械元件,用于支撑和转动机械装置中的轴。然而,由于长时间使用或其他原因,滚动轴承可能会出现故障,例如磨损、裂纹或松动等。因此,及时准确地诊断滚动轴承的故障非常重要,以避免设备损坏或生产中断。 MATLAB是一种强大的科学计算和数据分析工具,广泛应用于工程、科学和技术领域。它提供了丰富的函数和工具箱,可以用于信号处理、数据分析、图像处理等各种任务。在滚动轴承故障诊断中,MATLAB可以用于处理和分析滚动轴承的振动信号,以提取特征并判断是否存在故障。 快速谱峭度和谱峭度+包络谱分析是滚动轴承故障诊断中常用的方法之一。快速谱峭度是一种用于检测信号中频率成分变化的方法,可以帮助确定滚动轴承是否存在故障。谱峭度+包络谱分析结合了快速谱峭度和包络谱分析,可以更准确地识别滚动轴承的故障类型和程度。 总之,滚动轴承
科研立项的极客之道_手把手教你做科研
内容概要:本文详细介绍了在MySQL数据库查询语言中,使用SQL语句进行数据排序和限制结果的方法和技术。文章主要分为三个部分,首先是SQL语句的基础,包括关键字的使用和示例。其次是关于如何使用ORDER BY子句对数据进行排序,涵盖单列、多列、升降序排序以及别名列排序等。第三部分讲解了如何利用LIMIT子句限制查询结果数量,重点探讨了OFFSET的配合使用及其在分页查询中的具体应用场景。此外,还展示了ORDER BY和LIMIT的结合使用,特别是在分页和排序结合的具体实例,以及相应的PHP PDO实现方法。 适合人群:具有基础知识的MySQL开发者、数据库管理员、程序员及对数据库操作感兴趣的IT人员。 使用场景及目标:主要用于帮助读者理解和掌握MySQL中的排序与分页查询技能,应用于Web应用、数据分析等领域,优化数据库性能,提升用户体验。 其他说明:通过大量的实例演示和详尽的代码解析,使得读者不仅能了解到基本的概念,还能直接运用于实际项目开发中。文章内容由浅入深,非常适合新手学习和有一定经验的用户查阅。
雷达信号处理中Radon-Fourier算法的运动目标相参积累:Matlab实现与注释详解,雷达信号处理中Radon-Fourier算法检测运动目标及距离和多普勒参数估计的Matlab实现,雷达信号处理:运动目标相参积累——Radon-Fourier算法,用于检测运动目标,实现距离和多普勒参数估计。 Matlab程序,包含函数文件和使用文件,代码简洁易懂,注释详细。 ,雷达信号处理;运动目标相参积累;Radon-Fourier算法;距离和多普勒参数估计;Matlab程序;函数文件;代码简洁易懂;注释详细。,Radon-Fourier算法:雷达信号处理中的运动目标相参积累与参数估计
污水处理与三菱PLC联机仿真:组态王6.55与OPC通讯优化程序解读与视频操作步骤指南,污水处理系统优化:组态王6.55与三菱PLC联机仿真OPC通讯程序改写与操作详解视频,污水处理组态王6.55和三菱PLC联机仿真OPC通讯优化程序99,带注释改,仿真操作步骤讲解视频 ,关键词:污水处理;组态王6.55;三菱PLC;联机仿真;OPC通讯;优化程序;带注释;改程序;操作步骤;视频讲解。,污水处PLC联机仿真通讯优化程序及操作步骤视频