重构——49以函数取代参数(Replace Parameter with Methods)

以函数取代参数(Replace Parameter with Methods)

对象调用某个参数,并将结果作为参数,传递给另一个函数,而接受该参数的函数本身也能够调用前一个函数;让参数接受者去除该项参数,并直接调用前一个参数

一、动机

如果函数可以通过其他途径获得参数值,那么它就不应该通过参数取得该值

二、做法

1、如果有必要,将参数的计算过程提炼到一个独立的函数中

2、将函数本体内引用该参数的地方改为调用新建的函数

3、每次替换后,编译并测试

4、全部替换完成后,使用Remove Parameter将该参数去除

时间: 2024-07-29 22:52:14

重构——49以函数取代参数(Replace Parameter with Methods)的相关文章

重构——47以明确函数取代参数(Replace Parameter with Explicit Methods)

以明确函数取代参数(Replace Parameter with Explicit Methods) 你有一个函数,其中完全取决于参数值而采取不同的行为:针对该参数的每一个可用值,建立一个独立函数 一.动机 1.根据不同参数值作出不同的行为,那么就应该使用本项重构 2.接口更加清楚 二.做法 1.针对参数的每一种可能性,新建一个明确函数 2.修改表达式的每个分支,使其调用合适的新函数 3.修改每个分支后,编译并测试 4.修改原函数的每一个被调用点,改而调用上述的某个合适的新函数 5.编译,测试

重构——46令函数携带参数(Parameterize Method)

令函数携带参数(Parameterize Method) 若干函数做了类似的工作,但在函数本体中却包含了不同的值:建立单一函数,以参数表达那些不同的值 一.动机 去除重复代码,提高灵活性 二.做法 1.新建一个带有参数的函数,使它可以替换先前所有的重复性函数 2.编译 3.将调用旧函数的代码改为调用新函数 4.编译,测试 5.对所有旧函数重复上述步骤,每次替换后,修改并测试

代码重构(一):函数重构规则

重构是项目做到一定程度后必然要做的事情.代码重构,可以改善既有的代码设计,增强既有工程的可扩充.可维护性.随着项目需求的不断迭代,需求的不断更新,我们在项目中所写的代码也在时时刻刻的在变化之中.在一次新的需求中,你添加了某些功能模块,但这些功能模块有可能在下一次需求中不在适用.或者你因为需求迭代与变更,使你原有的方法或者类变得臃肿,以及各个模块或者层次之间耦合度增加.此时,你要考虑重构了.   重构,在<重构,改善既有代码的设计>这本经典的书中给出了定义,大概就是:在不改变代码对外的表现的情况

重构——53以工厂函数取代构造函数(Replace Constructor with Factory Method)

以工厂函数取代构造函数(Replace Constructor with Factory Method) 你希望在创建对象时不仅仅是做简单的构造动作:将构造函数替换为工厂函数 一.动机 在派生子类的时候以工厂函数取代类型码 二.做法 1.新建一个工厂函数,让它调用现有的构造函数 2.将调用构造函数的代码改为调用工厂函数 3.每次替换后,编译并测试 4.将构造函数声明为private 5.编译

MSSQL报错:参数数据类型 text 对于 replace 函数的参数 1 无效的解决办法_MsSql

但是我们可以换一种方法解决这个问题.下面就来分析下解决办法. 对text或ntext类型的数据在查询中不能进行字符串操作.这时用得最多的是把text当作varchar(实际内容长度低于8000字节时)或把ntext当作nvarchar(实际内容长度低于4000字节时)来处理.但是这样处理也不是非常妥当毕竟如果text字段内容超过8000了岂不是要被截断或者忽略掉.最终找到了一种方法解决了"参数数据类型 text 对于 replace 函数的参数 1 无效"的问题.下面用一个例子来说明怎

Oracle中自定义函数 无参数 输入参数 输出参数

-- 19-1:建立无参数的函数 CREATE OR REPLACE FUNCTION cur_datetime RETURN VARCHAR2 IS BEGIN RETURN TO_CHAR(sysdate, 'YYYY"年"MM"月"DD"日"HH24″时"MI"分"SS"秒"'); END; / -- 19-2:建立带有输入参数的函数 CREATE OR REPLACE FUNCTION g

[总结]C语言二维数组作为函数的参数

前言:今天在实现装配线调度程序时候,用到了二维数组,并将其作为函数的参数.在写程序的时候,遇到一些问题,即二维数组做函数的参数应该如何正确表示.我写程序的错误如下程序所示: 1 #include <cstdio> 2 void print(int *a[3]) 3 { 4 printf("%d\n",a[0][0]); 5 } 6 7 int main() 8 { 9 int a[2][3] = {1,2,3,4,5,6}; 10 print(a); 11 return 0

Python基本语法_函数_参数的多类型传值

前言 上一篇主要介绍了Python函数的参数类型,本篇继续学习Python函数多类型传值. 目录 前言 目录 软件环境 参数的多类型传值 向函数传递Tuple 向函数传递List 向函数传递Dictionary 软件环境 系统 UbuntuKylin 14.04 软件 Python 2.7.4 IPython 4.0.0 参数的多类型传值 一般而言,形参和实参的数量要一致.但是当实参为序列数据类型时,我们可以将多个实参传递到形参中. 我们可以在实参列表中以 * 或者 ** 标识符来限制传入的实参

《Hack与HHVM权威指南》——1.3.2 函数的参数

本节书摘来自华章出版社<Hack与HHVM权威指南>一书中的第1章,第1.3.2节,作者 Owen Yamauchi,更多章节内容可以访问"华章计算机"公众号查看. 1.3.2 函数的参数 给函数的参数做类型标注的语法和PHP中使用类型提示参数的语法一致,都是把类型名称放在参数名之前.function f(int $start, string $thing) { // ...}参数的默认值也一如既往地被支持,但前提是默认值要符合类型标注.在PHP中这里对于类型提示参数特别允