`

请您先登录,才能继续操作

重构36计(7-12)

阅读更多
第七计:串联函数调用
当一个类的大部分函数被较为频繁地调用,并且包含连续性地调用,那么可以考虑为这个类中那些没有返回值的函数增加返回值,即返回对象本身,这样就可以串联函数调用,使用起来较为方便,举个例子:
// 表示用户的类
public class User{
  public void setName(String name);
  public void setAge(int age);
  public void setPhoneNumber(int phoneNumber);
}

下面是不使用串联函数调用的情况:
User user = new User();
user.setName("West_Link");
user.setAge(3);
user.setPhoneNumber(122333);

下面是使用串联函数调用的情况:
User user = new User().setName("West_Link").setAge(3).setPhoneNumber(123333);

只需要为那些函数增加一个User对象的返回值即可,如下:
public User setName(String name){
   this.name = name;
   return this;
}

第八计:临时变量在用到时才声明
很多人喜欢在函数的开头把所有要用到的临时变量都声明了,我认为这种方式有以下几个缺点:
1、不利于代码的阅读,需要经常在变量的使用处和变量的声明处跳转,不方便。
2、容易造成资源的浪费,因为有些对象的初始化是比较耗费资源的,而函数可能在用到该对象之前返回。
3、不利于函数的拆分。
所以,我们应该尽可能降低临时变量的作用域,那样它能“捣乱“的范围就被缩至最小了。

第九计:保持类的公有函数粒度最小化
  一个类的公有函数不应该过多,那样会使类变得臃肿、不易使用,我认为最佳状态是绝大部分公有函数不能被拆分,也就是说,不存在那些通过其他公有函数也能达到目的的函数,例如下面的类:
public class StringArray{
  // 获取数组的大小
  public int getSize();
  // 判断数组是否为空
  public boolean isEmpty();
  // 将数据添加到数组的某个索引
  public void add(String value,int index);
  // 将数据添加到数组的末尾
  public void addToLast(String value);
  // 将数据添加到数组的起始位置
  public void addToFirst(String value);
}

StringArray其实只需要两个公有函数即可,即getSize和add,因为isEmpty可以通过getSize来达到相同的目的:getSize() == 0。类似地,addToLast、addToFirst也可以通过add来实现。不过,如果类的公有函数比较少,而且类似isEmpty类似的需求经常被用到,那么保留这些公有函数还是值得的。

第十计:将可访问性降至最低
  面向对象中的封装性使得我们可以隐藏类或者接口的实现细节,所以,为了让程序更易维护、接口或者类的使用更加简单,我们应该尽可能降低成员变量或者成员函数的可访问性,辅助函数一定要声明为私有的,确保只将接口函数声明为公有的,如果该辅助函数可能会被子类用到,则可以声明为保护的。辅助类也应声明为私有的,对于成员变量则一定要声明为私有的,只提供必要的set或者get函数。总之,当我们增加新的类、成员变量、成员函数时,一定要合理地设置可访问性,暴露给外界的越少越好。

第十一计:合并条件减少嵌套
  条件判定如果嵌套的太多会大大降低程序的可读性,很容易滋生Bug,例如:
if(a){
  if(b || c){
      if(d){
          ...
       }
   }
}

可以合并成:
if(a && (b || c) && d){
     ...
}

第十二计:循环中早用continue减少条件嵌套
除了通过合并条件来减少嵌套层次外,在for或者while循环中,可以用continue来减少条件嵌套,例如:
for(int i=0; i<100;i++){
   if(a){
      if(b){
          if(c){
               ...
          }
       }
    }
}

这段代码的嵌套深度是4,使用continue可以大大减少嵌套层次:
for(int i=0; i<100;i++){
  if(!a)
     continue;
  if(!b)
     continue;
  if(!c)
     continue;
   ...
}


ref:http://blog.csdn.net/m13666368773/article/details/7472209
分享到:
评论

相关推荐

    重构36计-其实很简单

    以上是重构的其中十计,重构的目的是提升代码质量,使其更易读、易维护。通过持续不断地进行重构,我们可以逐步优化代码,减少潜在的错误,同时提高开发效率。记住,重构并不总是意味着大规模的改动,有时候一个小的...

    代码重构36计(摘抄)

    【代码重构36计】是关于提升代码质量与可维护性的策略集合,主要针对C++编程语言。重构的核心目标是使程序更容易理解、更便于维护,并优化其结构。以下是其中的五项重构策略: 1. **参数列表对象化**: 当函数的...

    重构36计.docx

    重构是软件开发中的一种重要实践,旨在改善代码的结构,提高可读性和可维护性,同时保持原有功能。以下是对给定文档中提及的重构策略的详细解释: ### 参数列表对象化 当一个函数或方法的参数过多时,可以考虑创建...

    藏经阁-研发效能提升和敏捷实施36计.pdf

    "藏经阁-研发效能提升和敏捷实施36计.pdf" 本文档主要介绍了阿里巴巴的研发效能提升和敏捷实施36计,旨在提高研发效率和敏捷性。下面是本文档的知识点总结: 一、流动效率和研发效率提升 * 流动效率:响应能力、...

    提高PHP代码质量36计

    ### 提高PHP代码质量36计之精要 在软件工程领域,代码质量的重要性不言而喻,尤其对于广泛使用的编程语言PHP而言,提升代码质量不仅能够增强程序的稳定性、可维护性和安全性,还能显著提高开发效率。以下,我们将...

    提高php代码质量 36计 转载开源中国社区

    提高PHP代码质量的36计,是一份针对PHP开发者提升代码质量和编程效率的指南,尤其适合初学者和希望精进技能的中级开发者。本文将详细解读其中的几个关键点,帮助开发者理解并实践这些规范。 ### 1. 避免使用相对...

    java 三十六计

    重构,其实很简单,它的目的就是让程序变得更容易被理解,更具有可维护性,结构更合理

    TI_MotorControlCompendium_2010

    **12. 通断** - **定义:**电机控制中的一种基本动作,即控制电机的启动与停止。 - **方法:**可以通过改变供电状态来实现。 **13. 换向器** - **定义:**用于刷式直流电机中,确保电流方向正确切换的部件。 - **...

    iphone3开发基础教程

    3.6.2 连接所有元素 36 3.6.3 测试 39 3.7 小结 39 第4章 更丰富的用户界面 40 4.1 满是控件的屏幕 40 4.2 活动、静态和被动控件 42 4.3 创建应用程序 42 4.3.1 导入图像 42 4.3.2 实现图像视图和文本字段 43 4.3.3...

Global site tag (gtag.js) - Google Analytics