Code refactoring 是什么

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

怎样执行Code refactoring

1.重命名

例子:命名语意不明。

//重构前
let show = true; function name(){} //重构后
let isShow=true; function getName(){}

2.提取

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

//重构前
function sayHello(){
console.log('Hello World')
} function sayBye(){
console.log('GoodBye World')
} sayHello()
sayBye() //重构后
function say(str){
console.log(str)
} say('Hello World')
say('GoodBye World')

例子:减少参数

//重构前
function peopleInfo(name, age) {
console.log('My name is ' + name + ',' + age + ' years old.')
} peopleInfo('Sroot', 18) //重构后
function peopleInfo(people) {
console.log('My name is ' + people.name + ',' + people.age + ' years old.')
} peopleInfo({
name: 'Sroot',
age: 18
})

3.封装

例子:功能封装。

//重构前
function setCookie(name, value) {
var Days = 30
var exp = new Date()
exp.setTime(exp.getTime() + Days * 24 * 60 * 60 * 1000)
document.cookie = name + '=' + escape(value) + ';expires=' + exp.toGMTString()
}
function getCookie(name) {
var arr,
reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)')
if ((arr = document.cookie.match(reg))) return unescape(arr[2])
else return null
} setCookie('key', 'sroot')
getCookie('key') //重构后
var Cookies = {
setCookie: function(name, value) {
var Days = 30
var exp = new Date()
exp.setTime(exp.getTime() + Days * 24 * 60 * 60 * 1000)
document.cookie = name + '=' + escape(value) + ';expires=' + exp.toGMTString()
},
getCookie: function(name) {
var arr,
reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)')
if ((arr = document.cookie.match(reg))) return unescape(arr[2])
else return null
}
} Cookies.setCookie('key', 'sroot')
Cookies.getCookie('key')

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

//重构前
if (isOpenSound === true) {
console.log("It's open sound")
} //重构后
if (isOpenSound) {
console.log("It's open sound")
} //另一种写法
isOpenSound && console.log("It's open sound")

4.扩展

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

let name='sroot';

function say(){
console.log('hello world')
}

例子:使用相同的代码

let files = ["a.png","b.png"]
let fd = new FormData() //重构前
fd.append('file1',files[0])
fd.append('file2',files[1]) //重构后
for (let i = 0; i < files.length; i++) {
fd.append('file' + i, files[i])
}

5.性能优化。

例子:循环语句性能优化

//重构前
var text = ''
for (i = 0; i < 10; i++) {
text += i + '++'
document.getElementById('demo').innerHTML = text
} //重构后
var text = ''
for (i = 0; i < 10; i++) {
text += i + '++'
}
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. numpy数组的索引和切片

    numpy数组的索引和切片 基本切片操作 >>> import numpy as np >>> arr=np.arange(10) >>> arr ...

  2. 洛谷 P1306 斐波那契公约数 题解

    题面 结论:gcd(F[n],F[m])=F[gcd(n,m)]; F[n]=a和F[n+1]=b F[n+2]=a+b,F[n+3]=a+2b,…F[m]=F[m?n?1]a+F[m?n]b F[n ...

  3. C语言--- 高级指针2(结构体指针,数组作为函数参数)

    一.结构体指针 1. 什么是结构体指针?指向结构体变量的指针     结构体:     typedef  struct stu{                          char name[ ...

  4. python之网络部分

    1.C/S B/S架构 C: client端 B: browse 浏览器 S: server端 C/S架构: 基于客户端与服务端之间的通信 ​ QQ, 游戏,皮皮虾, 快手,抖音. ​ 优点: 个性化 ...

  5. Hdu 4738【tanjan求无向图的桥】割边判定定理 dfn[x] < low[y]

    题目: 曹操在长江上建立了一些点,点之间有一些边连着.如果这些点构成的无向图变成了连通图,那么曹操就无敌了.刘备为了防止曹操变得无敌,就打算去摧毁连接曹操的点的桥.但是诸葛亮把所有炸弹都带走了,只留下 ...

  6. Android 调用摄像头功能【拍照与视频】

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/ma_hoking/article/details/28292973 应用场景: 在Android开发 ...

  7. java8之stream和lambda表达式

    JAVA 8 已经推出有一段时间了, 相比之前, 我们操作集合的方式应该是这样? 代码:List<String> list = new ArrayList<>(); list. ...

  8. MySQL第三讲 一一一一 视图、触发器、函数、存储过程

    1. 视图 1.1 视图前戏 我们之前讲有,临时表的概念. 现在我们创建一个临时表:select * from (select * from tb1 where id between 10 and 1 ...

  9. 关于android studio从2.3升级到3.0以上可能会遇到的问题

    请参考链接: http://blog.csdn.net/hylczp/article/details/60137958 gradle-3.3-all网盘下载地址: 链接:http://pan.baid ...

  10. LDO ,开关电源DC-DC的优缺点

    一般LDO电源自身的功耗为(Vin-Vout)*Iout,因此这两者越大,功耗也越大,效率也就越低. LDO ,开关电源DC-DC的优缺点(2008-11-06 22:40:23)转载标签: 电源杂谈 ...