💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
[TOC] ## 提取子程序或者方法 ## 将子程序的代码内联化 如果子程序的程序体很简单,且含义不言自明,那么就在使用的时候直接使用这些代码。 bad: 未内敛化 ``` int getRation(int numberOfLateDeliveries) { return (moreThanFiveLateDeliveries(numberOfLateDeliveries)) ? 2 : 1; } bool moreThanFiveLateDeliveries(int numberOfLateDeliveries) { return (numberOfLateDeliveries > 5); } ``` good ``` int getRation(int numberOfLateDeliveries) { return (numberOfLateDeliveries > 5) ? 2 : 1; } ``` ## 将冗长的子程序转换为类 ## 用简单的算法替代复杂算法 ## 删除参数 如果子程序已经不再使用某个参数,就删掉它 ## 将查询操作从修改操作中独立出来 查询操作并不改变对象的状态。一旦查询操作中有改变对象的状态,则应该独立出来 ## 合并相似的子程序,通过参数区分它们的功能 两个相似子程序唯一区别或许只是其中用到的常量值不同。请把它们合并到一起,然后将常量值通过参数传入。 ## 将行为取决于参数的子程序拆分开来 如果一个子程序根据输入参数的值执行了不同的代码,请考虑将它拆分成几个可以被单独调用的、无须传递特定参数的子程序。 ## 传递整个对象而非特定成员 如果发现有同一个对象的多个值被传递给了一个子程序,考虑是否可修改其接口使之接受整个对象。 ## 传递特定成员而非整个对象 ## 包装向下转型的操作 通常当子程序返回一个对象时,应当返回其已知的最精确的对象。这尤其适用于返回迭代器、群集、群集元素等的情况。