文档章节

Remove Parameter (移除参数)

忆瑶
 忆瑶
发布于 2014/04/01 09:38
字数 687
阅读 62
收藏 0

Summary 函数体不再需要某个参数。将该参数去除。

                                               

            动机:

        程序员可能经常添加参数,却往往不愿意去掉它们。他们打的如意算盘是:无论如何,多余的参数不会引起任何问题,而且以后还有可能用上它。

这也是恶魔的诱惑,一定要把它从脑子里赶出去!参数代表着函数所需要的信息,不同的参数值有不同的意义。函数调用者必须为每一个参数操心该传什么东西进去。如果你不去掉多余参数,就是让你的每一位用户多费一份心。是很不划算的,更何况“去除参数”是非常简单的一项重构。

但是,对于多态函数,情况有所不同。这种情况下,可能多态函数的另一份(或多份)实现会使用这个参数,此时你就不能去除它。你可以添加一个独立函数,在这些情况下使用,不过你应该先检查调用者如何使用这个函数,以决定是否值得这么做。如果某些调用者已经知道他们正在处理的是一个特定的子类,并且已经做了额外工作找出自己需要的参数,或已经利用对类体系的了解来避免取到null,那么就值得你建立一个新函数,去除那多余的参数。如果调用者不需要了解该函数所属的类,你也可以继续保持调用者无知而幸福的状态。

做法:

Remove Parameter的做法和Rename MethodAdd Parameter非常相似。

1.检查函数签名是否被超类或子类实现过。如果是,则需要针对每份实现分别进行下列步骤。

2.声明一个新函数,名称与原函数相同,只是去除不必要的参数。将旧函数的代码复制到新函数中。

à如果要去除的参数不止一个,将它们一次性去除比较容易

3.编译。

4.修改旧函数,令它调用新函数。

à如果只有少数几个地方引用旧函数,你可以大胆放心地跳过这一步骤。

5.编译,测试。

6.找出旧函数的所有被引用点,修改它们,令它们改而引用新函数。每次修改后,编译并测试。

7.删除旧函数。

à如果旧函数是该类public接口的一部分,你可能无法安全地删除它。这种情况下,将它保留在原处,并将它标记为deprecated(建议不使用)。

8.编译,测试。


© 著作权归作者所有

忆瑶
粉丝 19
博文 133
码字总数 99861
作品 0
杭州
高级程序员
私信 提问
重构-改善既有代码的设计-简化函数调用

简化函数调用相关重构手法 1.rename method(函数改名)(函数名称未能揭示函数的用途。修改函数名称) 2.add parameter(添加参数)(为此函数添加一个对象参数,让该对象带进函数所需信息)...

梦想游戏人
2016/05/19
23
0
DOM——节点删除.empty()、remove()和.detach()

节点删除.empty()、remove()和.detach() 1 empty清空方法,与删除不一样,只移除了指定元素中的所有子节点,不仅移除子元素(和其他后代元素),同样移除元素里的文本,如 慕课网 2 通过emp...

拉考的考拉
2017/11/20
0
0
XamarinEssentials教程移除键值首选项的键值

XamarinEssentials教程移除键值首选项的键值 如果开发者不再使用首选项中的某一项时,可以将该项移除掉。此时可以使用Preferences类的Remove()方法,该方法可以将存在于首选项中的指定键以及...

大学霸
2018/10/22
6
0
《Oracle PL/SQL开发指南》学习笔记29——源码调试——Oracle集合API(第七部分)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hpdlzu80100/article/details/84768092 在调试代码的过程中,才发现很多代码没法直接执行成功,需要做些修改方...

预见未来to50
2018/12/03
0
0
Kotlin编译调校之WarningsAsErrors

这之前的文章中,我们介绍过如果通过Kotlin编译器参数实现将所有的warnings按照errors对待,主要的实现方法是这样 234 kotlinOptions { allWarningsAsErrors = true} 那么问题可能就会被提出...

技术小黑屋
08/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

聊聊nacos config的deleteConfig

序 本文主要研究一下nacos config的deleteConfig ConfigController nacos-1.1.3/config/src/main/java/com/alibaba/nacos/config/server/controller/ConfigController.java @Controller@Re......

go4it
27分钟前
3
0
面试:原来Redis的五种数据类型底层结构是这样的

关注我,可以获取最新知识、经典面试题以及微服务技术分享   在Redis中会涉及很多数据结构,比如SDS,双向链表、字典、压缩列表、整数集合等等。Redis会基于这些数据结构自定义一个对象系统...

ccww_
33分钟前
4
0
java发送html模板的高逼格邮件

最近做了一个监测k8s服务pod水平伸缩发送邮件的功能(当pod的cpu/内存达到指定阈值后会水平扩展出多个pod、或者指定时间内pod数应扩展到指定数量),一开始写了个格式很low的邮件,像下面这样...

码农实战
47分钟前
10
0
php-fpm配置文件详解/MariaDB密码重置、慢查询日志

来源:https://blog.csdn.net/Powerful_Fy php-fpm主配置文件路径:/usr/local/php-fpm/etc/php-fpm.conf #位于安装php安装目录下的etc/目录中,该文件中最后一行将配置文件指向:include=/...

asnfuy
51分钟前
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部