重构代码之删除对参数的赋值
删除对参数的赋值 是一种重构技术,旨在消除对方法参数的重新赋值。这种实践可以增强代码的可读性和维护性,避免潜在的副作用。以下是详细讲解:
一、动机
- 保护参数的意图:方法参数通常表示传入数据或状态。如果重新赋值,会导致混淆和意外行为,特别是当参数是可变对象时。
- 提高代码可读性:当参数保持只读时,开发者可以更清楚地了解其作用,降低理解成本。
- 减少潜在错误:在复杂方法中,参数的重新赋值可能会引发难以调试的错误。
二、重构步骤
- 查找参数赋值:搜索所有对方法参数的赋值操作。
- 引入本地变量:如果需要修改参数值,创建一个新的本地变量,并将参数的值赋给这个变量。
- 替换赋值:用本地变量替换对参数的直接赋值。
- 运行测试:确保代码功能未被改变,所有测试用例通过。
三、示例
3.1 重构前
以下代码通过对参数重新赋值来调整逻辑:
public decimal CalculateDiscount(decimal price)
{
if (price > 100)
{
price = price * 0.9m; // 重新赋值
}
return price;
}
3.2 重构后
通过引入本地变量来避免对参数的赋值:
public decimal CalculateDiscount(decimal price)
{
decimal discountedPrice = price; // 引入本地变量
if (price > 100)
{
discountedPrice = price * 0.9m;
}
return discountedPrice;
}
四、适用场景
- 复杂算法中参数变动难以追踪 :当方法较长且逻辑复杂时,使用此技术可减少混淆。
- 值类型与引用类型的安全问题:避免对引用类型参数重新赋值,以减少意外副作用。
五、注意事项
- 参数名与变量名的选择:为本地变量选择清晰的名字,避免与参数名混淆。
- 可变对象的处理:引用类型参数仍然可能被修改,应谨慎设计。