替换算法
问题
所以你想用一个新的算法取代现有的算法?
解决方案
将实现算法的方法主体替换为新算法。
之前
字符串foundPerson(字符串[]people){for (int i = 0;I < people.length;我+ +){如果(人[我].equals(“不”)){返回“不”;} if (people[i].equals("John")){返回"John";} if (people[i].equals("Kent")){返回"Kent";}}返回"";}
后
字符串foundPerson(字符串[]people){列出候选对象=数组。asList(new String[] {"Don", "John", "Kent"});For (int i=0;I < people.length;i++) {if (candidate .contains(people[I])){返回people[I];}}返回"";}
之前
string FoundPerson(string[] people) {for (int i = 0;i < people.Length;我+ +){如果(人[我].Equals(“不”)){返回“不”;} if (people[i].Equals("John")){返回"John";} if (people[i].Equals("Kent")){返回"Kent";}}返回String.Empty;}
后
string FoundPerson(string[] people) {List candidate = new List() {"Don", "John", "Kent"};For (int I = 0;i < people.Length;i++) {if (candidate . contains (people[i])){返回people[i];}}返回String.Empty;}
之前
函数foundPerson(数组$people){for ($i = 0;$i < count($people);(+ +){如果美元人($ i) = = =“不”){返回“不”;} if ($people[$i] === "John"){返回"John";} if ($people[$i] === "Kent"){返回"Kent";}}返回"";}
后
函数foundPerson(数组$people){foreach (["Don", "John", "Kent"]作为$needle) {$id = array_search($needle, $people, true);If ($id !== false){返回$people[$id];}}返回"";}
之前
def foundPerson(people): for i in range(len(people)): if people[i] == "Don":返回"Don" if people[i] == "John":返回"John" if people[i] == "Kent":返回"Kent"返回"" "
后
def foundPerson(people): candidate = ["Don", "John", "Kent"]返回people if people in candidate else ""
之前
foundPerson(people: string[]): string{for (let person of people) {if (person.equals("Don")){返回"Don";} if (person.equals("John")){返回"John";} if (person.equals("Kent")){返回"Kent";}}返回"";}
后
foundPerson(people: string[]): string{let candidate = ["Don", "John", "Kent"];For (let person of people) {if (candidate .includes(person)) {return person;}}返回"";}
为什么重构
逐步重构并不是改进程序的唯一方法。有时候,一个方法因为问题而变得非常混乱,因此更容易拆除该方法并重新开始。也许你已经找到了一个更简单更有效的算法。如果是这种情况,您应该简单地用新算法替换旧算法。
随着时间的推移,你的算法可能会被合并到一个知名的库或框架中,你想摆脱你的独立实现,以简化维护。
您的程序的需求可能变化很大,以至于您现有的算法无法用于该任务。
如何重构
确保你已经尽可能地简化了现有的算法。将不重要的代码移动到使用的其他方法提取方法.算法中移动的部分越少,就越容易替换。
在新方法中创建新算法。用新算法替换旧算法,并开始测试程序。
如果结果不匹配,则返回到旧的实现并比较结果。找出差异的原因。虽然原因通常是旧算法中的错误,但更有可能是由于新算法中的某些东西不起作用。
当所有测试都成功完成时,删除旧算法!