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

引入解释性变量(Introduce Explaining Variable)

你有一个复杂的表达式,将该复杂表达式(或其中的一部分)的结果放进一个临时变量,以此变量名称来解释表达式用途

一、动机

1、表达式有可能非常复杂难以阅读

2、条件逻辑中,可以运用临时变量来解释每一步运算的意义

二、做法

1、声明一个final临时变量,将待分解之复杂表达式中的一部分动作的运算结果赋值给它。

2、将表达式式中的“运算结果这一部分”,替换为上述临时变量。如果被替换的这一部分在代码中重复出现,你可以每次一个,逐一替换

3、编译,测试

4、重复上述过程,处理表达式的其他部分

时间: 2024-10-24 17:09:02

重构——5引入解释性变量(Introduce Explaining Variable)的相关文章

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

引入断言(Introduce Assertion) 某一段代码需要对程序状态作出某种假设:以断言明确表现这种假设 一.动机 断言是一个条件表达式,应该总是为真.如果它失败了,表示程序员犯了错误.因此断言的失败应该导致一个非受控异常.断言绝对不能被系统的其它部分使用.实际上,程序最后成品往往将断言统统删除,因此,标记"某些东西是个断言"是很重要的 二.做法 1.如果你发现代码假设某个条件始终为真,就加入一个断言说明这种情况 2.简化函数调用

应用-android中设置支持javascript会引入xss变量到你的程序中,请检查清楚

问题描述 android中设置支持javascript会引入xss变量到你的程序中,请检查清楚 Using setJavaScriptEnabled can introduce XSS vulnerabilities into you application, review carefully. 如何理解上面这句英语啊?? 解决方案 你指的是在webView上设置支持JavaScript么? 解决方案二: @SuppressLint("SetJavaScriptEnabled") 忽略

重构——6分解临时变量(Split Temporary Variable)

分解临时变量(Split Temporary Variable) 你的程序有某个临时变量被赋值超过一次,它既不是循环变量,也不被用于收集计算结果针对每次赋值,创造一个独立,对应的临时变量 一.动机 如果临时变量承担多个责任,他就应该被替换为多个临时变量 二.做法 1.在待分解的临时变量的声明及其第一次被赋值处,修改其名称 2.将新的临时变量声明为final 3.以该临时变量的第二次赋值动作为界,修改此前对该临时变量的所有引用点,让它们引用新的临时变量 4.在第二次赋值处,重新声明原先的那个临时变

重构——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,传入上述新建类的实例对象,并将此参数值设

深入理解JavaScript系列(12) 变量对象(Variable Object)_javascript技巧

JavaScript编程的时候总避免不了声明函数和变量,以成功构建我们的系统,但是解释器是如何并且在什么地方去查找这些函数和变量呢?我们引用这些对象的时候究竟发生了什么? 原始发布:Dmitry A. Soshnikov 发布时间:2009-06-27 俄文地址:http://dmitrysoshnikov.com/ecmascript/ru-chapter-2-variable-object/ 英文翻译:Dmitry A. Soshnikov 发布时间:2010-03-15 英文地址:http

引人瞩目的 CSS 变量(CSS Variable)

这是一个令人激动的革新. CSS 变量,顾名思义,也就是由网页的作者或用户定义的实体,用来指定文档中的特定变量. 更准确的说法,应该称之为 CSS 自定义属性 ,不过下文为了好理解都称之为 CSS 变量. 一直以来我们都知道,CSS 中是没有变量而言的,要使用 CSS 变量,只能借助 SASS 或者 LESS 这类预编译器. 但是新的草案发布之后,直接在 CSS 中定义和使用变量已经不再是幻想了,像下面这样,看个简单的例子: // 声明一个变量: :root{ --bgColor:#000; }