重构——41引入断言(Introduce Assertion)

引入断言(Introduce Assertion)

某一段代码需要对程序状态作出某种假设;以断言明确表现这种假设

一、动机

断言是一个条件表达式,应该总是为真。如果它失败了,表示程序员犯了错误。因此断言的失败应该导致一个非受控异常。断言绝对不能被系统的其它部分使用。实际上,程序最后成品往往将断言统统删除,因此,标记“某些东西是个断言”是很重要的

二、做法

1、如果你发现代码假设某个条件始终为真,就加入一个断言说明这种情况

2、简化函数调用

时间: 2024-10-24 17:08:54

重构——41引入断言(Introduce Assertion)的相关文章

重构——5引入解释性变量(Introduce Explaining Variable)

引入解释性变量(Introduce Explaining Variable) 你有一个复杂的表达式,将该复杂表达式(或其中的一部分)的结果放进一个临时变量,以此变量名称来解释表达式用途 一.动机 1.表达式有可能非常复杂难以阅读 2.条件逻辑中,可以运用临时变量来解释每一步运算的意义 二.做法 1.声明一个final临时变量,将待分解之复杂表达式中的一部分动作的运算结果赋值给它. 2.将表达式式中的"运算结果这一部分",替换为上述临时变量.如果被替换的这一部分在代码中重复出现,你可以每

重构——17引入本地扩展(Introduce Local Extension)

引入本地扩展(Introduce Local Extension) 你需要为服务类提供一些额外函数,但你无法修改这个类:建立一个新类,使它包含这些额外函数,让这个类扩展成为源类的子类或者包装类 一.动机 1.需要的额外函数超过俩,Introduce Foreign Method Hold不住了 2.包装类和子类怎么选择? 二.做法 1.建立一个扩展类,将它作为原始类的子类或者包装类 2.在扩展类中加入转型构造函数 3.在扩展类中加入新特性 4.根据需要,将源对象替换为扩展对象 5.将针对原始类定

重构——16引入外加函数(Introduce Foreign Method)

引入外加函数(Introduce Foreign Method) 你需要为提供服务的类增加一个函数,但你无法修改这个类:在客户端建立一个函数,并以第一参数形式传入一个服务类实例 一.动机 1.服务类不能提供一项新服务,你又不能修改源码 2.如果需要大量的外加函数,就Introduce Local Extension 3.外加函数是权宜之计 二.做法 1.在客户端类建立一个函数,用来提供你需要的功能,这个函数不应该调用客户端类的任何特性.如果他需要一个值,把该值当做参数传给它 2.以服务类实例作为

重构——40引入Null对象(Introduce Null Object)

引入Null对象(Introduce Null Object) 你需要再三检查某对象是否为null:将null值替换为null对象 一.动机 1.多态最根本的好处在于:你不必在向对象询问"你是什么类型"而后根据得到的答案调用对象的某个行为--你只管调用就是了,其它的一切多态机制会为你安排妥当 2.null对象一定是常量,可以使用Singleton来实现它们 3.关于Null对象模式,你可以在Woolf[Woolf]中找到更详细的介绍 二.做法 1.为源类建立一个子类,使其行为就像是源类

重构——50引入参数对象(Introduce Parameter Object)

引入参数对象(Introduce Parameter Object) Range模式:某些参数总是很自然的同时出现:以一个对象取代这些参数 一.动机 1.碰到数据泥团,我们可以运用一个对象包装这些数据,那怕只是为了把这些数据组织在一起,这样做也是值得的 2.可以把这些参数的共同处理移到新对象中,减少重复代码 二.做法 1.新建一个类,用以表现你想替换的一组参数,将这个类设为不可变的 2.编译 3.针对使用改组参数的所有函数,实施Add Parameter,传入上述新建类的实例对象,并将此参数值设

Python中断言Assertion的一些改进方案_python

Python Assert 为何不尽如人意? Python中的断言用起来非常简单,你可以在assert后面跟上任意判断条件,如果断言失败则会抛出异常. >>> assert 1 + 1 == 2 >>> assert isinstance('Hello', str) >>> assert isinstance('Hello', int) Traceback (most recent call last): File "<input>

《重构:改善既有代码的设计》—重构列表

重构列表重构:改善既有代码的设计Add Parameter(添加参数) Change Bidirectional Association to Unidirectional(将双向关联改为单向关联) Change Reference to Value(将引用对象改为值对象) Change Unidirectional Association to Bidirectional(将单向关联改为双向关联) Change Value to Reference(将值对象改为引用对象) Collapse H

《重构HTML:改善Web应用的设计(修订版)》——2.3 测试

2.3 测试 从理论上讲,重构不应破坏任何未曾破坏的代码,然而在实践中并不是那样.在某种程度上,本书后面会向你展示哪些改动是安全的.但无论是人还是工具都会犯错误,重构也有可能引入新错误,所以重构过程就需要一个良好的自动化测试套件(suite).进行任何重构之后,你更希望可以通过单击一个按钮和扫视一眼就能看到是否有代码被破坏了. 尽管测试驱动开发(test-driven development)在传统程序员中取得了巨大的成功,但在Web开发者中还是不太常见,尤其对前端开发者而言.实际上,网站的任何

PHP 杂谈《重构-改善既有代码的设计》之四 简化条件表达式_php技巧

思维导图 点击下图,查看大图.  介绍    条件逻辑有可能十分复杂,因此本章提供一些重构的手法,专门用来简化它们.   全文简述(你可直接跳过下面的内容) 核心重构:Decompose Conditional--分离"转辙逻辑"(switching logic)和"操作细节"(details)分离. 多处测试有相同结果:Consolidate Conditional Expresssion 条件代码中去掉重复成分:Consolidate Duplicate 标识特