• 【重构】重新组织函数


    重构: 

    【名词】对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本。

    【动词】使用一系列重构手法,在不改变软件观察行为的前提下,调整其结构

    【意义】重构使软件更容易理解,填补“想要他做什么”,和“准确说出我所要的”之间的间隙

    【范围】在不同的领域中有着不同的重构手法,例如多线程环境和单线程环境,函数式编程和命令式编程语言等,更多要求的是你自己本身具有一定的创造力,发现适合你的重构技巧。

    重新组织函数篇:

    1、Extract Method 抽离函数出来,其实和整洁代码的理念差不多;让Method在同一层次中很重要哦;这点我又想起微服务了;什么样才是足够小呢?

    • 定义:有一段代码可以组织在一起被单独提取出来;
    • 名称:很多小型函数有很多好处,而且只有在你为小型函数真正命好名的时候才会凸显其作用,如果你想不出一个好名称,那就不要提
    • 长度:函数长度其实不是问题,问题在于函数名称和函数语义之间的距离;既然函数名称比函数体还长也没关系。另外,如果函数体本身清晰易读,就没有必要提取了,关键在于意图;
    • 难点:局部变量。

    2、Inline Method 内联函数,一个和Extract Method相反的用法,通常没必要的间接层只会是累赘,另外,如果小函数划分混乱的时候,也可以应该方法先合并为大函数,再拆分小函数。记住,并不是所有间接层都有价值。

    3、Replace Temp With Query ,临时变量坏处多,用查询改变临时变量是好的,可能会增加性能开销,但不要担心,优化的时候才是你需要担心的,阻塞才是要害怕的;

      定义:将一个表达式提炼到一个独立的函数中,将这个临时变量的所有引用点替换为对新函数的调用,此后,新函数就可被其他函数使用。

      查询:查询就是赋值给临时变量的那个表达式,该表达式可以利用Extract Method被提炼出一个函数;

      问题:临时变量的问题在于,他们只是暂时的,而且只能在所属函数中使用,它会驱使你写长函数,而且让代码不清晰,不整洁。

    4、Replace Type Code with State/Strategy 如果一个类有状态类型,最好转换为状态类、或者策略类;把行为封装进去;

    5、如何去掉switch语句,switch一般是根据状态而选择行为,有必要的时候,去掉它,状态机中就是如此,但比较简单的可以暂时先不急着下手;其实就是用好状态模式提供的多态能力;

    6、Introduce Explaining Variable 引入解析性变量;将复杂表达式(或其中一部分)的结果放进一个临时变量,以此变量名称来解析表达式用途。该方法和Extract Method有相同的效果,如果是量小的情况下尽量用后者,而很多临时变量或者临时变量要用多次为提高性能,我们也应该引入解析性变量;

    7、Split Temporary Variable,分解临时变量,临时变量有各种不同用途,其中某些用途会很自然导致临时变量被多次复赋值,如“循环变量”、“结果收集变量”就是两个例子;分解临时变量就是要注意,一个变量不应该承担一个以上的责任。

    8、Remove Assignments to Parameters,移除对参数的赋值;一般参数职责为:被传入的某些东西;

    9、Replace Method with Method Object,很多时候临时变量多,特别是大型函数的时候,难以用Extract Method,我们可以把整个函数做成一个对象,然后变量就变成了这个对象的成员,然后我们这个对象就可以利用成员变量拆分成许多小函数了。

  • 相关阅读:
    hud 3336 count the string (KMP)
    JSOI2008星球大战(并查集)
    HAOI2006受欢迎的牛
    十二月个人考核
    十二月个人考核
    CentOS配置Tomcat监听80端口,虚拟主机
    CentOS配置Tomcat监听80端口,虚拟主机
    如何调试一个无法重现的错误?
    如何调试一个无法重现的错误?
    Highcharts的自适应DOM或者DIV,JS方法实现
  • 原文地址:https://www.cnblogs.com/iCanhua/p/10290360.html
Copyright © 2020-2023  润新知