Code refactoring 是什么

在不改变软件的外部行为的条件下,通过修改代码改变软件内部结构,将效率低下和过于复杂的代码转换为更高效、更简单和更简单的代码。

怎样执行Code refactoring

1.重命名

例子:命名语意不明。

  1. //重构前
  2. let show = true;
  3.  
  4. function name(){}
  5.  
  6. //重构后
  7. let isShow=true;
  8.  
  9. function getName(){}

2.提取

例子:不同函数名,相同功能函数

  1. //重构前
  2. function sayHello(){
  3. console.log('Hello World')
  4. }
  5.  
  6. function sayBye(){
  7. console.log('GoodBye World')
  8. }
  9.  
  10. sayHello()
  11. sayBye()
  12.  
  13. //重构后
  14. function say(str){
  15. console.log(str)
  16. }
  17.  
  18. say('Hello World')
  19. say('GoodBye World')

例子:减少参数

  1. //重构前
  2. function peopleInfo(name, age) {
  3. console.log('My name is ' + name + ',' + age + ' years old.')
  4. }
  5.  
  6. peopleInfo('Sroot', 18)
  7.  
  8. //重构后
  9. function peopleInfo(people) {
  10. console.log('My name is ' + people.name + ',' + people.age + ' years old.')
  11. }
  12.  
  13. peopleInfo({
  14. name: 'Sroot',
  15. age: 18
  16. })

3.封装

例子:功能封装。

  1. //重构前
  2. function setCookie(name, value) {
  3. var Days = 30
  4. var exp = new Date()
  5. exp.setTime(exp.getTime() + Days * 24 * 60 * 60 * 1000)
  6. document.cookie = name + '=' + escape(value) + ';expires=' + exp.toGMTString()
  7. }
  8. function getCookie(name) {
  9. var arr,
  10. reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)')
  11. if ((arr = document.cookie.match(reg))) return unescape(arr[2])
  12. else return null
  13. }
  14.  
  15. setCookie('key', 'sroot')
  16. getCookie('key')
  17.  
  18. //重构后
  19. var Cookies = {
  20. setCookie: function(name, value) {
  21. var Days = 30
  22. var exp = new Date()
  23. exp.setTime(exp.getTime() + Days * 24 * 60 * 60 * 1000)
  24. document.cookie = name + '=' + escape(value) + ';expires=' + exp.toGMTString()
  25. },
  26. getCookie: function(name) {
  27. var arr,
  28. reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)')
  29. if ((arr = document.cookie.match(reg))) return unescape(arr[2])
  30. else return null
  31. }
  32. }
  33.  
  34. Cookies.setCookie('key', 'sroot')
  35. Cookies.getCookie('key')

例子:控制结构和逻辑问题

  1. //重构前
  2. if (isOpenSound === true) {
  3. console.log("It's open sound")
  4. }
  5.  
  6. //重构后
  7. if (isOpenSound) {
  8. console.log("It's open sound")
  9. }
  10.  
  11. //另一种写法
  12. isOpenSound && console.log("It's open sound")

4.扩展

例子:定义变量、方法没有使用。

  1. let name='sroot';
  2.  
  3. function say(){
  4. console.log('hello world')
  5. }

例子:使用相同的代码

  1. let files = ["a.png","b.png"]
  2. let fd = new FormData()
  3.  
  4. //重构前
  5. fd.append('file1',files[0])
  6. fd.append('file2',files[1])
  7.  
  8. //重构后
  9. for (let i = 0; i < files.length; i++) {
  10. fd.append('file' + i, files[i])
  11. }

5.性能优化。

例子:循环语句性能优化

  1. //重构前
  2. var text = ''
  3. for (i = 0; i < 10; i++) {
  4. text += i + '++'
  5. document.getElementById('demo').innerHTML = text
  6. }
  7.  
  8. //重构后
  9. var text = ''
  10. for (i = 0; i < 10; i++) {
  11. text += i + '++'
  12. }
  13. document.getElementById('demo').innerHTML = text

PS:代码重构应该注意一下几点:

        (1)重构自己的代码,不要重构别人写的代码。(自己的问题自己解决)

        (2)重构代码不要整合新的功能代码。( 明确自己的目的,不要弄巧成拙)

        (3)重构代码之后一定要进行测试。(软件测试是检查软件质量的唯一标准)

Code refactoring的优缺点

优点:提高代码质量,优化软件产品架构与性能,减少项目的技术债,避免项目重写。(重构 != 重写)

缺点:增加工作负担,可能会出现一些业务上漏洞,也可能代码过于精炼导致代码可读性变差。

总结:  代码重构是个好方法代码重构是需要单元测试与自动化测试来支持,否则适得其反,请不要轻易重构代码。

探究重构代码(Code refactoring)的更多相关文章

  1. 探究代码审查(Code review)

    Code review 是什么 对软件源代码的系统性检查,查找软件源代码质量,结构,漏洞等问题. PS:Code review  ≍ Code inspections ≥ Code walkthrou ...

  2. 重构现有代码:Refactoring

    重构现有代码:Refactoring 1.WHY SHOULD WE REFACTOR? 1.Refactoring Improves the Design of Software Without r ...

  3. 第四章:重构代码[学习Android Studio汉化教程]

    第四章 Refactoring Code The solutions you develop in Android Studio will not always follow a straight p ...

  4. Winform打砖块游戏制作step by step第5节---重构代码,利用继承多态

    一 引子 为了让更多的编程初学者,轻松愉快地掌握面向对象的思考方法,对象继承和多态的妙用,故推出此系列随笔,还望大家多多支持. 二 本节内容---重构代码,利用继承多态 1. 主界面截图如下: 2.  ...

  5. eclipse 重构代码自动抽取函数

    1.选择重构代码段 2.重构 – 抽取方法 3.命名重构代码段抽取的方法 4.使用抽取的方法

  6. BNUOJ 19297 Code Refactoring

    Code Refactoring Time Limit: 3000ms Memory Limit: 131072KB   This problem will be judged on UVA. Ori ...

  7. 代码code设置9.png/9-patch 图片背景后,此view中的TextView等控件显示不正常

    代码code设置9.png/9-patch 图片背景后,此view中的TextView等控件显示不正常 设置 padding=0

  8. amazeui学习笔记--css(HTML元素2)--代码Code

    amazeui学习笔记--css(HTML元素2)--代码Code 一.总结 1.行内代码:code标签<code> 2.代码片段:pre标签<pre> 3.限制代码块高度:添 ...

  9. 使用IDEA重构代码

    使用IDEA提供的快捷操作,高效快速重构代码. 常用重构快捷菜单 Shift+F6,重构 - 重命名 Ctrl+Alt+m,提取方法 F6,移动方法

随机推荐

  1. Magento开发基础知识之RequireJs

    一.RequireJS概述 RequireJS是一个工具库,主要用于客户端的模块管理.实现异步或动态加载,从而提高代码的性能和可维护性. RequireJS的基本思想是,通过define方法,将代码定 ...

  2. Linux普通用户无法使用sudo

    问题描述: jenkins执行发布脚本,因为使用的是jenkins用户,所以有些shell命令需要 sudo 来执行,导致报错. + sudo rm -rf /usr/share/nginx/html ...

  3. MongoDB和Redis的区别

    1).内存管理机制 a.Redis的数据全部存储在内存当中,会定期写入到磁盘当中,当内存不够用时, 可以选择指定的LRU(最近最少使用算法)的算法删除数据: b.MongoDB数据存在内存,有Linu ...

  4. 使用二阶微分锐化图像(拉普拉斯算子)基本原理及Python实现

    1. 拉普拉斯算子 1.1 简介 一种典型的各向同性的微分算子,可用于检测图像中灰度图片的区域 $$ \nabla^{2} f=\frac{\partial^{2} f}{\partial x^{2} ...

  5. HNUSTOJ-1512 奇怪的导弹(暴力)

    1512: 奇怪的导弹 时间限制: 3 Sec  内存限制: 32 MB提交: 31  解决: 13[提交][状态][讨论版] 题目描述 最近国际形势比较紧张,就拿中国来说,比如南海问题,钓鱼岛事件等 ...

  6. intellij 编译 springmvc+hibernate+spring+maven 找不到hbm.xml映射文件

    1. 错误信息 Invocation of init method failed; nested exception is org.hibernate.MappingNotFoundException ...

  7. 关于mysql的查询优化

    由于工作原因,最近甲方客户那边多次反应了他们那边的系统查询速度慢,经过排除之后,发现他们那边的数据库完全没有用到索引,简直坑得一笔,通过慢查询日志分析,为数据表建立了适当的索引之后,查询速度明显的提高 ...

  8. rpmdb: Thread/process 10646/3086534416 failed: Thread died in Berkeley DB library

    明明用rpm查看包存在,但删除的时候进程就停住了.后来出现以下错误:rpmdb: Thread/process 10646/3086534416 failed: Thread died in Berk ...

  9. kill - 终止进程

    SYNOPSIS(总览) kill[-ssignal|-p][-a]pid... kill -l [ signal ] DESCRIPTION (描述) kill 给指定进程发送指定信号. 如果没有指 ...

  10. 转载:一种云环境下SaaS软件部署方法及装置与流程

    转载:http://www.xjishu.com/zhuanli/55/201710103925.html 本发明涉及云计算技术领域,特别是涉及一种云环境下SaaS软件部署方法及装置. 背景技术: 随 ...