提取方法
问题
您有一个可以组合在一起的代码片段。
解决方案
将此代码移动到单独的新方法(或函数)中,并将旧代码替换为对该方法的调用。
之前
void printOwing() {printBanner();//打印详细信息。system . out。Println ("name: " + name);system . out。println("amount: " + getOutstanding());}
后
void printOwing() {printBanner();printDetails (getOutstanding ());} void printDetails(double outstanding) {System.out. out.}Println ("name: " + name);system . out。Println(“金额:”+未支付);}
之前
void PrintOwing() {this.PrintBanner();//打印详细信息。控制台。WriteLine("name: " + this.name);控制台。WriteLine("amount: " + this.GetOutstanding());}
后
void PrintOwing() {this.PrintBanner();this.PrintDetails ();} void PrintDetails(){控制台。WriteLine("name: " + this.name);控制台。WriteLine("amount: " + this.GetOutstanding());}
之前
函数printOwing() {$this->printBanner();//打印详细信息。打印("name: ")。$ this - >名称);打印("amount ")。$ this - > getOutstanding ());}
后
函数printOwing() {$this->printBanner();$ this - > printDetails ($ this - > getOutstanding ());}函数printDetails($outstanding) {print("name: " .}$ this - >名称);打印("amount ")。杰出的美元);}
之前
def printOwing(self): self. printbanner() #打印细节打印("name:", self.name)打印("amount:", self. getoutstanding ())
后
def printOwing(self): self. printbanner () self.printDetails(self. getoutstanding ()): print("name:", self.name): print("amount:", outstanding)
之前
printOwing():无效{printBanner();//打印详细信息。Console.log ("name: " + name);console.log("amount: " + getOutstanding());}
后
printOwing():无效{printBanner();printDetails (getOutstanding ());} printDetails(outstanding: number):无效{console.log("name: " + name);Console.log("金额:" +未结算);}
为什么重构
方法中发现的行越多,就越难弄清楚该方法做什么。这是这次重构的主要原因。
除了消除代码中的粗糙边之外,提取方法也是许多其他重构方法中的一个步骤。
好处
更可读的代码!确保新方法的名称能够描述该方法的用途:
createOrder ()
,renderCustomerInfo ()
等。更少的代码重复。通常在方法中找到的代码可以在程序的其他地方重用。因此,您可以用对新方法的调用来替换副本。
隔离代码的独立部分,这意味着不太可能出现错误(比如修改了错误的变量)。
如何重构
创建一个新方法,并以使其目的不言自明的方式命名。
将相关的代码片段复制到新方法中。从旧位置删除片段,并在那里调用新方法。
找到此代码片段中使用的所有变量。如果它们是在片段内部声明的,而不是在片段外部使用的,那么就保持它们不变——它们将成为新方法的局部变量。
如果在提取的代码之前声明了变量,则需要将这些变量传递给新方法的参数,以便使用之前包含在其中的值。有时,通过求助于更容易摆脱这些变量用查询替换Temp.
如果您看到在提取的代码中某个局部变量以某种方式发生了变化,这可能意味着稍后在主方法中需要使用这个变化的值。仔细检查!如果确实是这样,则将该变量的值返回给main方法以保持一切正常运行。