移除参数的赋值
问题
一些值被赋给方法主体内的参数。
解决方案
使用局部变量而不是参数。
之前
int discount(int inputVal, int quantity) {if (quantity > 50) {inputVal -= 2;} //…}
后
int discount(int inputVal, int quantity) {int result = inputVal;If (quantity > 50) {result -= 2;} //…}
之前
int折扣(int inputVal, int数量){if(数量> 50){inputVal -= 2;} //…}
后
int折扣(int inputVal, int数量){int结果= inputVal;If (quantity > 50) {result -= 2;} //…}
之前
函数折扣($inputVal, $quantity) {if ($quantity > 50) {$inputVal -= 2;}……
后
函数折扣($inputVal, $quantity) {$result = $inputVal;If ($quantity > 50) {$result -= 2;}……
之前
def discount(inputVal, quantity): if quantity > 50: inputVal -= 2 #…
后
def折扣(inputVal,数量):结果= inputVal if数量> 50:结果= 2 #…
之前
discount(inputVal: number, quantity: number): number {if (quantity > 50) {inputVal -= 2;} //…}
后
discount(inputVal: number, quantity: number): number {let result = inputVal;If (quantity > 50) {result -= 2;} //…}
为什么重构
这种重构的原因与分裂临时变量,但在这种情况下,我们处理的是一个参数,而不是一个局部变量。
首先,如果一个参数是通过引用传递的,那么在方法内部参数值被更改后,这个值将被传递给请求调用此方法的实参。这通常是偶然发生的,并导致不幸的后果。即使在编程语言中通常是通过值(而不是引用)传递参数,这种编码怪癖可能会使那些不习惯它的人疏远。
其次,对单个参数多次赋值会使您难以知道在任何特定时间点参数中应该包含哪些数据。如果您的参数及其内容已被记录,但实际值可能与方法内的预期值不同,则问题会恶化。
好处
程序的每个元素应该只负责一件事。这使得代码维护更加容易,因为您可以安全地替换代码而没有任何副作用。
这种重构有助于提取分离方法的重复代码.
如何重构
创建一个局部变量并分配参数的初始值。
在这一行之后的所有方法代码中,用新的局部变量替换参数。