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. [WPF]使用CheckAccess检测是否在控件的ui线程上执行

    private void Parallel(object sender, RoutedEventArgs e) { Task.Run(() => ChangeColour(Brushes.Red ...

  2. redis为什么使用单线程 ,还那么快,单线程是怎么实现的

    单线程使用队列 为什么使用单线程 https://baijiahao.baidu.com/s?id=1628498089535886382&wfr=spider&for=pc http ...

  3. 查看ftp创建的用户

    先su然后查看cat /etc/passwd,500以后的是添加的使用者账户.

  4. go依赖包管理工具vendor基础

    go依赖包管理工具vendor基础 vendor是go的依赖包管理工具,主要用于管理项目中使用到的一些依赖. 它将项目依赖的包,特指外部包,复制到当前工程下的vendor目录下,这样go build的 ...

  5. 72. Edit Distance (JAVA)

    Given two words word1 and word2, find the minimum number of operations required to convert word1 to  ...

  6. softmax+交叉熵

    1 softmax函数 softmax函数的定义为 $$softmax(x)=\frac{e^{x_i}}{\sum_j e^{x_j}} \tag{1}$$ softmax函数的特点有 函数值在[0 ...

  7. PAT Basic 1039 到底买不买 (20 分)

    小红想买些珠子做一串自己喜欢的珠串.卖珠子的摊主有很多串五颜六色的珠串,但是不肯把任何一串拆散了卖.于是小红要你帮忙判断一下,某串珠子里是否包含了全部自己想要的珠子?如果是,那么告诉她有多少多余的珠子 ...

  8. docker命令(随时补充)

    导入导出容器:https://blog.csdn.net/LEoe_/article/details/78685156 拷贝文件到容器内:docker cp 本地路径 容器长ID:容器路径

  9. nasm

    sudo apt install nasm 64bit: nasm -f elf64 test.asm ld -s -o test test.o --------------------------- ...

  10. 前后台入门系统搭建详解(springboot+angularjs)

    1 . 搭建boot启动框架,这一步骤什么都不用添加,搭建完后框架如下: 2.因为是前后台项目,所以一般是需要有前台页面的,需要在后端maven依赖中加入web依赖包 spring-boot-star ...