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

分解临时变量(Split Temporary Variable)

你的程序有某个临时变量被赋值超过一次,它既不是循环变量,也不被用于收集计算结果针对每次赋值,创造一个独立,对应的临时变量

一、动机

如果临时变量承担多个责任,他就应该被替换为多个临时变量

二、做法

1、在待分解的临时变量的声明及其第一次被赋值处,修改其名称

2、将新的临时变量声明为final

3、以该临时变量的第二次赋值动作为界,修改此前对该临时变量的所有引用点,让它们引用新的临时变量

4、在第二次赋值处,重新声明原先的那个临时变量。

5、编译,测试

6、逐次重复上述过程。每次都在声明处对临时变量改名,并修改下次赋值之前的引用点

时间: 2024-11-09 09:43:02

重构——6分解临时变量(Split Temporary Variable)的相关文章

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

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

重构——3内联临时变量(Inline Temp)

内联临时变量(Inline Temp) 你有一个临时变量,只被一个简单表达式赋值一次,而它妨碍了其他重构手法.将所有对该变量的引用动作,替换为对它赋值的那个表达式自身 一.动机 1.作为"以查询取代临时变量"的一部分使用 2.临时变量妨碍了其他的重构手法 二.做法 1.检查给临时变量赋值的语句,确保等号右边的表达式没有副作用 2.如果这个临时变量并未被声明为final,就将它声明为final,然后编译,确保这个变量真的只被赋值了一次 3.找到该临时变量的所有引用点,将它们替换为&quo

重构——4以查询取代临时变量(Replace Temp with Query)

以查询取代临时变量(Replace Temp with Query) 你的程序以一个临时变量保存某一个表达式的结果.将这个表达式提炼到一个独立函数中,将这个临时变量所有的引用点替换为对新函数的调用,此后,新函数就可以被其他函数使用 一.动机 临时变量是暂时的,只能在所属函数中使用 二.做法 1.找出只被赋值一次的临时变量 2.将该临时变量声明为final 3.编译 4.将"对该临时变量赋值"之语句的等号右侧部分提炼到一个独立函数中.首先将函数声明为"private"

scalar-SQL @list临时变量 ,报错信息必须定义变量

问题描述 SQL @list临时变量 ,报错信息必须定义变量 declare @list table ( Id int, Name navarchar(12) ) insert into @list select * from tableA select * from @list --到这步都是OK的,能得到@list中的数据 --下面我想把@list与tableB表联接起来做查询 select * from @list,tableB where @list.id = tableB.id 结果报

PHP中应该避免使用同名变量(拆分临时变量)_php技巧

当一个临时变量被赋值多次时,那么将其拆分成多个,除非它是一个循环计数器. Motivation 临时变量有这多种不同的用途.比如它们可被用作循环中的计数器,在循环中保存结果集,亦或保存一个冗长的表达式的计算结果等等. 这些类型的变量(容器)应该只赋值一次.如果一个同名的临时变量被赋予多个职责,将会影响代码的可读性.这个时候我们应当引入一个新的临时变量以使代码更加清晰易懂. 可能有些注重性能的人会说,引入一个新的变量将会占用更多的内存.的确如此,但是注册一个新的变量不会吸干服务器内存的,这一点请放

objective c-利用临时变量在两个ViewController之间传值

问题描述 利用临时变量在两个ViewController之间传值 临时变量eneity,如有两个ViewController,OneViewController,SecondViewController两个ViewController,跳转正常,从OneViewController利用临时变量eneity发送值到SecondViewController,但是SecondViewController和回传值,利用eneity,OneViewController却得不到,在不用代理的情况下,是否可以

c++-C++引用变量问题,函数中临时变量返回引用

问题描述 C++引用变量问题,函数中临时变量返回引用 C++ primer plus第六版引用一节,说不能在函数中新建一个变量,并将其引用返回.道理我都懂,就是说函数调用完后,那部分临时内存会释放.可是为什么我自己写的下述代码不报错,反而能正常运行呢? #include using namespace std; struct free_throws //此处定义一个结构体 { int i; }; const free_throws & clone2(free_throws & ft1, f

关于将临时变量置为null是否有助于快速垃圾回收

"将不再使用的临时变量立即置为null是否有助于垃圾回收"的话题好像有不少人争论过. 首先,我们要理解GC回收垃圾数据的标准是通过路径检查,看是否还有引用指向某个对象.如果不再有引用指向这个待回收的对象,那么GC会将其放入待回收队列.从这个理论上来说,适时将不再使用的变量置为null是有助于垃圾回收的.但是,进一步理解GC的工作模式,我们会发现如下几个问题. 1. GC只是将其置于待回收队列,并不一定立即回收(需要一定的条件).2. GC并不会在变量置为null时启动回收动作. 所以只

编程习惯:你会把函数的形参赋值给函数内临时变量吗?

问题描述 编程习惯:你会把函数的形参赋值给函数内临时变量吗? 阅读代码时,常会发现有人把函数的形参赋值给函数内临时变量,然后对这个临时变量操作,如下面的例子: int func(int i) { int temp=i; printf("%dn", temp++); return temp; } 和直接操作形参有什么区别呢?(如下) int func(int i) { printf("%dn", i++); return i; } 请大神指点--