重构函数调用-Rename Method重新命名函数一

重构函数调用-Rename Method重新命名函数一

1.重新命名函数

1.1.使用场景

函数的名称未能揭示函数的用途。修改函数名称。

我极力提倡的一种编程风格就是:将复杂的处理过程分解成小函数。但是,如果做得不好,这会使你费尽周折却弄不清楚这些小函数各自的用途。要避免这种麻烦,关键就在于给函数起一个好名称。函数的名称应该准确表达它的用途。给函数命名有一个好办法:首先考虑应该给这个函数写上一句怎样的注释,然后想办法将注释变成函数名称。

你常常无法第一次就给函数起一个好名称。这时候你可能会想:就这样将就着吧,毕竟只是一个名称而已。当心!这是恶魔的召唤,是通向混乱之路,千万不要被它诱惑!如果你看到一个函数名称不能很好地表达它的用途,应该马上加以修改。记住,你的代码首先是为人写的,其次才是为计算机写的。而人需要良好名称的函数。想想过去曾经浪费的无数时间吧。

1.2.如何做

  • 检查函数签名是否被超类或子类实现过。如果是,则需要针对每份实现分别进行下列步骤。
  • 声明一个新函数,将它命名为你想要的新名称。将旧函数的代码复制到新函数中,并进行适当调整。
  • 编译。
  • 修改旧函数,令它将调用转发给新函数。
  • 如果只有少数几个地方引用旧函数,你可以大胆地跳过这一步骤。
  • 编译,测试。
  • 找出旧函数的所有被引用点,修改它们,令它们改而引用新函数。每次修改后,编译并测试。
  • 删除旧函数。
  • 如果旧函数是该类public接口的一部分,你可能无法安全地删除它。这种情况下,将它保留在原处,并将它标记为deprecated(建议不使用)。
  • 编译,测试。

1.3.示例

我以getTelephoneNumber() 函数来取得某人的电话号码:

  public String getTelephoneNumber() {
      return ("(" + _officeAreaCode + ") " + _officeNumber);
  }

现在,我想把这个函数改名为getOfficeTelephoneNumber() 。首先建立一个新函 数,命名为getOfficeTelephoneNumber() ,并将原函数getTelephoneNumber() 的代码拷贝过来。然后,让旧函数直接调用新函数:

 class Person...
   public String getTelephoneNumber(){
       return getOfficeTelephoneNumber();
   }
   public String getOfficeTelephoneNumber() {
       return ("(" + _officeAreaCode + ") " + _officeNumber);
   }

现在,我需要找到旧函数的所有调用者,将它们全部改为调用新函数。
全部修改完 后,就可以将旧函数删掉了。如果需要添加或去除某个参数,过程也大致相同。
如果旧函数的调用者并不多,我可以直接修改这些调用者,令它们调用新函数,不必让旧函数充当中介。如果测试出错,我可以回到起始处,并放慢前进速度。

你可能感兴趣的:(【重构代码设计思想】,重构,java,开发语言)