重构第26天 移除双重否定(Remove Double Negative)
理解:”移除双重否定”是指把代码中的双重否定语句修改成简单的肯定语句,这样即让代码可读,同时也给维护带来了方便。
详解:避免双重否定重构本身非常容易实现,但我们却在太多的代码中见过因为双重否定降低了代码的可读性以致于非常让人容易误解真正意图。存在双重否定的代码具有非常大的危害性,因为这种类型的代码容易引起错误的假设,错误的假设又会导致书写出错误的维护代码,最终会导致bug产生。具体可以看下面的代码:
1 public class Order 2 { 3 public void Checkout(IEnumerable<Product> products, Customer customer) 4 { 5 if (!customer.IsNotFlagged) 6 { 7 // the customer account is flagged 8 // log some errors and return 9 return; 10 } 11 12 // normal order processing 13 } 14 } 15 16 public class Customer 17 { 18 public decimal Balance { get; private set; } 19 20 public bool IsNotFlagged 21 { 22 get { return Balance < 30m; } 23 } 24 }
如上代码中的双重否定可读性非常低,因为我们很难搞明白双重否定的正确值。要重构它也非常容易,如下是重构后的代码:
1 public class Order 2 { 3 public void Checkout(IEnumerable<Product> products, Customer customer) 4 { 5 if (customer.IsFlagged) 6 { 7 // the customer account is flagged 8 // log some errors and return 9 return; 10 } 11 12 // normal order processing 13 } 14 } 15 16 public class Customer 17 { 18 public decimal Balance { get; private set; } 19 20 public bool IsFlagged 21 { 22 get { return Balance >= 30m; } 23 } 24 }
”双重否定“很容易让人产生错误的判断,也很难让人理解你的代码,所以这个重构在我们的代码中是很重要的,尤其是在判断条件很多且业务复杂的时候。
重构第26天 移除双重否定(Remove Double Negative)相关推荐
- Remove Double Negative(去除双重否定)
WHAT 双重否定的条件语句,可以使用一个肯定的条件语句代替 记住:双重否定 = 肯定 本次重构涉及到的基本重构手法: Extract Method(提炼方法) Inline Method(内联方法) ...
- R语言可视化包ggplot2移除(remove)可视化结果的图例(legend)实战
R语言可视化包ggplot2移除(remove)可视化结果的图例(legend)实战 目录 R语言可视化包ggplot2移除(remove)可视化结果的图例(legend)实
- 重构第15天 移除重复的代码(Remove Duplication)
理解:移除重复的代码,顾名思义就是把多处重复的代码搬移到一个公共的地方,来减少代码量,提高代码可维护性. 详解:看下面的例子就很容易理解 重构前code 1 using System; 2 using ...
- jQuery 元素移除empty() remove()与detach()的区别?
@1.empty() 删除匹配元素集合中所有的后代字节点元素: <p>hello<span>world</span></p> $("p&quo ...
- 重构26-Remove Double Negative(去掉双重否定)
尽管我在很多代码中发现了这种严重降低可读性并往往传达错误意图的坏味道,但这种重构本身还是很容易实现的.这种毁灭性的代码所基于的假设导致了错误的代码编写习惯,并最终导致bug.如下例所示: public ...
- macOS下malware移除实战之搜索引擎Google劫持为trovi的移除(Remove Google hijacking for trovi removal under macOS)
声明: Declaration: 由于网络中的病毒virus/malware等存在随时变异或者对应多种感染方式等情况,本文所针对的处理方法仅针对本次样本负责,个人如有误操作,后果自负.如需帮助,请在W ...
- LeetcCode 27:移除元素 Remove Element(python、java)
公众号:爱写bug 给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) ...
- linux svn e170001 认证失败,jenkins - svn: E170001报错的原因以及解决方案
1. 什么问题What? 使用Jenkins配置的svn拉取项目,Jenkins报错:svn: E170001; Your credentials to connect to the reposito ...
- 【JAVA】代码重构技巧
简介 重构是持续改进代码的基础.抵制重构将带来技术麻烦:忘记代码片段的功能.创建无法测试的代码等等. 而有了重构,使用单元测试.共享代码以及更可靠的无bug 的代码这些最佳实践就显得简单多了. 鉴于重 ...
最新文章
- 三维模型特征提取方法概述
- linux cpu占用率 监控工具 简介
- html5设置文字不能复制,网页文字不能复制?巧解网页文字不能复制
- 数据结构实验之链表五:单链表的拆分_JAVA
- 原来... C++ explicit的作用
- 如何安全的在不同工程间安全地迁移asset数据?三种方法
- 【解答】一个电动模型,每一组电池能让其行驶8分钟,一个充电器能同时给两组电池充电,一组充满需要15分钟,至少准备(?)组电池,(?)个充电器,可以让模型每次行驶完可以立即换电池行驶不用等待。
- 野史杂谈,西游记令人崩溃的真相
- linux之使用md5sum命令比较两个文件是否一样
- 最长公共上升子序列(LCIS)
- java集合——树集(TreeSet)+对象的比较
- Java 8中的功能接口是什么? @功能注释和示例
- MySql默认编码所造成的乱码麻烦1.222
- set row count
- 一款好看的单页个人引导页源码
- Python入门--个数可变的位置参数和关键字参数
- backtrack5 oracle,BackTrack5(BT5)硬盘安装
- Vue基础案例-----Todos(1)
- 公司寄件管理平台必要性分析
- 在职计算机培训班,计算机科学与技术在职研究生招生院校有哪些?
热门文章
- nodejs __dirname 与 process.cwd(); 的区别
- python的擅长领域
- 左移 (<<) / 右移 (>>)注意细节
- 使用iTOP进行CMDB资产管理
- 谈谈mysql update语句 set顺序问题、列交换sql实现及多表更新注意事项
- Tensorflow MobileNet移动端迁移学习指南
- 不用做实验也可以轻松找到癌症组织特异性基因
- table 嵌套table 让内部table高度填满外部的td
- 直拨电话和ip电话区别_IP电话的基础
- 我看ERP的物料编码原则