资讯专栏INFORMATION COLUMN

代码重构

trigkit4 / 1988人阅读

摘要:引言列举一些编码过程中重构的目标虽然不难理解但确实蛮实用的平时编码中有些经常遇到。说明第一种方式通过设置的方式代码不易读而重构后的代码简介明了。

引言

列举一些编码过程中重构的目标,虽然不难理解,但确实蛮实用的,平时编码中有些经常遇到。

用return 退出多重循环

常见的就是二重for循环标记break退出。

let func=function () {
    let flag=false;
    for(let i=0;i<100;i++){
        for(let j=0;j<100;j++){
            if(i*j>30){
                flag=true;
                break;
            }

        }
        if(flag==true){
            break;
        }
    }
}



let func=function () {
    let flag=false;
    for(let i=0;i<100;i++){
        for(let j=0;j<100;j++){
            if(i*j>30){
                return;
            }

        }
    }
}

说明 第一种 方式通过设置flag的方式,代码不易读,而重构后的代码简介明了。其次如果return后还要一些逻辑要执行,可以把要执行的逻辑封装成函数放到return后面。

大型类的分解
let Attack=function (hero) {
    this.hero=hero;
}
Attack.prototype.start=function (type) {
    return this.list[type].call(this);
}
Attack.prototype.list={
    q:function () {
        console.log("q skill")
    },
    w:function () {
        console.log("w skill")
    }
};

let Hero=function (name) {
    this.name=name;
    this.attackObj=new Attack(this);
}
Hero.prototype.attack=function (type) {
    this.attackObj.start(type);
}
let gaiLunIns=new Hero("GaiLun");
gaiLunIns.attack("q");

说明 函数式编程中我们会将复杂逻辑拆成一个个可处理的最小单元,而在面向对象中合理利用设计模式,可以极大的解耦我们的代码,
上述实例中,攻击功能比较复杂,多带带封装成一个类,技能维护成一个列表,拓展性强,整个攻击逻辑不掺和在hero当中,hero显得也非常精简。

少用三目运算符

少用并不是说不用,适当的地方使用,例如下面的判断条件简单且清晰

let global=typeof window != "undefined"  ? window:this;

但是如果嵌套很多层,就不提倡,不易阅读和维护。

减少函数参数的数量

函数参数多,就容易给使用者带来复杂度,合理的编码,利用一些设计模式,例如典型的策略模式,而不应该保留过多条件在函数参数中,
复杂的逻辑内部应该封装起来。还要就是函数参数应该用一个对象来传递,例如vue,handsontable等等,这些工具实例化时传递的都是option对象,
工具内部做了一些默认处理,并且我们传递的参数时,也不用关心顺序和个数。

函数提炼
let getPrice=function (price) {
    var date=new Date();
    if(date.getMonth()>=6&&date.getMonth()<=9){
            return price*0.8
    }
}
let isSummer=function () {
    let date=new Date();
    return date.getMonth()>=6&&date.getMonth()<=9
}

let getPrice=function (price) {
    var date=new Date();
    if(isSummer()){
        return price*0.8
    }
    return price;
}

说明 复杂的条件语句增加维护难度,不易阅读,而函数更能清晰的表达代码含义,如果命名良好,基本就不用加注释了。

一等函数
http.post("/add/article",function(){
…… 
});
http.post("/add/article",callback);

说明 上面不传递一个具体匿名函数的好处是,方便解耦和以后不确定增加的维护难度,函数式编程中一等函数的应用好处其实有很多。

总结

设计模式和重构行为,都不是必须的,但是这都是一个程序员基本的涵养,重构有很多方面,我只是列举了其中几点,还有一些常见的比如用对象或函数式封装变量,模块化封装一组功能等等,上面的示例中,有些情况
在平常编码中不注意也会出现上面的情况,总结一下,也算是加深一下自己的认知吧。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/83122.html

相关文章

  • 重构:一项常常被忽略的基本功

    摘要:无论如何,单元测试一直是一中非常重要却常常被忽视的技能。在实践中,重构的要求是很高的它需要有足够详尽的单元测试,需要有持续集成的环境,需要随时随地在小步伐地永远让代码处于可工作状态下去进行改善。 showImg(https://segmentfault.com/img/bVbttWF?w=1000&h=528); 五月初的时候朋友和我说《重构》出第 2 版了,我才兴冲冲地下单,花了一个...

    idealcn 评论0 收藏0
  • 重构-改善既有代码的设计(二) --重构原则

    摘要:改进代码设计的一个重要原则就是消除重复代码使软件更容易被理解优秀的代码能够让接收你代码的付出更少的学习成本。重构更容易找到重构能加深对代码的理解。可以重构的情况添加功能时可以重构。说明你没有发现代码的错误。需要重构复审代码时可以重构。 为何重构 重构不是银弹,但是帮助你达到以下几个目的 改进软件设计 不良的程序需要更多的代码。而代码越多,正确的修改就越困难。改进代码设计的一个重要原则就...

    myshell 评论0 收藏0
  • 重构改善既有的代码设计(重构原则)

    摘要:难以通过重构手法完成设计的改动先想像重构的情况。何时不该重构现有代码根本不能正常运作。现在,我可以修改这个子类而不必承担午一中影响另一处的风险。 重构:对软件内部结构的一种调整,目的是再不改变软件的可观察行为的前提下,提高其可理解性,降低其修改成本。 两顶帽子 添加新功能 添加新功能时不应该修改既有代码,只管添加新功能,通过测试重构 重构时你就不能再添加功能,只管改进程序结构,此时...

    XUI 评论0 收藏0
  • 重构-改善既有代码设计》读书笔记-重构

    摘要:重构改善既有代码设计动词使用一系列重构手法,在不改变软件可观察行为的前提下,调整其结构。修补错误时重构代码时重构怎么重构关于代码的重构技巧参考重构改善既有代码设计读书笔记代码篇个人博客 重构定义 名词 对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本。——《重构-改善既有代码设计》 动词 使用一系列重构手法,在不改变软件可观察行为的前提下,...

    ermaoL 评论0 收藏0
  • 重构-改善既有代码的设计(五)--重构列表

    摘要:什么是重构列表重构方法需要以一种特定的格式记录下来。这些重构手法到底有多成熟本书中提到的重构手法第章。做法创造新函数,以用途命名提炼代码到函数中检查变量名是否符合规范在源函数中,将被提炼代码替换为函数引用测试范例重构前重构后 什么是重构列表 重构方法需要以一种特定的格式记录下来。按照格式记录下来的重构方法的集合叫重构列表 重构的记录格式 每个重构手法可分为5个部分: 名称 构建重构词汇...

    davidac 评论0 收藏0
  • 重构 - 改善代码的各方面问题

    摘要:暴露接口如果是函数,就扩展,否则就是验证数据使用金额校验规则这样运行能正常,也有扩展性性,但是对于代码洁癖的来说,这样写法不优雅。 重构不是对以前代码的全盘否定,而是利用更好的方式,写出更好,更有维护性代码。不断的追求与学习,才有更多的进步。 1.前言 做前端开发有一段时间了,在这段时间里面,对于自己的要求,不仅仅是项目能完成,功能正常使用这一层面上。还尽力的研究怎么写出优雅的代码,性...

    AlphaWallet 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<