重构代码之删除对参数的赋值

news/2024/11/18 15:41:46/

删除对参数的赋值 是一种重构技术,旨在消除对方法参数的重新赋值。这种实践可以增强代码的可读性和维护性,避免潜在的副作用。以下是详细讲解:

一、动机

  1. 保护参数的意图:方法参数通常表示传入数据或状态。如果重新赋值,会导致混淆和意外行为,特别是当参数是可变对象时。
  2. 提高代码可读性:当参数保持只读时,开发者可以更清楚地了解其作用,降低理解成本。
  3. 减少潜在错误:在复杂方法中,参数的重新赋值可能会引发难以调试的错误。

二、重构步骤

  1. 查找参数赋值:搜索所有对方法参数的赋值操作。
  2. 引入本地变量:如果需要修改参数值,创建一个新的本地变量,并将参数的值赋给这个变量。
  3. 替换赋值:用本地变量替换对参数的直接赋值。
  4. 运行测试:确保代码功能未被改变,所有测试用例通过。

三、示例

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;
}

四、适用场景

  • 复杂算法中参数变动难以追踪 :当方法较长且逻辑复杂时,使用此技术可减少混淆。
  • 值类型与引用类型的安全问题:避免对引用类型参数重新赋值,以减少意外副作用。

五、注意事项

  1. 参数名与变量名的选择:为本地变量选择清晰的名字,避免与参数名混淆。
  2. 可变对象的处理:引用类型参数仍然可能被修改,应谨慎设计。

http://www.ppmy.cn/news/1548020.html

相关文章

[BSidesCF 2019]SVGMagic

打开题目 给了提示&#xff0c;使用魔法将svg转换成png&#xff0c;搜索了一下svg 是一种XML标记语言&#xff0c;既然是XML&#xff0c;就可能存在XXE漏洞 构造一个XML外部实体注入&#xff08;XXE&#xff09;攻击&#xff0c;尝试一下 <!ENTITY file SYSTEM "file…

IPv6 NDP 记录

NDP&#xff08;Neighbor Discovery Protocol&#xff0c;邻居发现协议&#xff09; 是 IPv6 的一个关键协议&#xff0c;它组合了 IPv4 中的 ARP、ICMP 路由器发现和 ICMP 重定向等协议&#xff0c;并对它们作出了改进。该协议使用 ICMPv6 协议实现&#xff0c;作为 IPv6 的基…

后台运行docker compose项目,一直失败,提示:Timeout exceeded while awaiting headers?让我来看看~

最近做实验&#xff0c;后台运行docker compose 项目的时候&#xff0c;一直做不下去&#xff0c;卡了好几天。提示是这样的&#xff1a; Get "https://registry-1.docker.io/v2/": net/http: reguest canceled while waiting for connection (client.Timeout exceed…

Python 第三方库 PyQt5 的安装

目录 前言 PyQt5安装 不同操作系统PyQt5安装 一、Windows 系统 二、macOS 系统 三、Linux 系统&#xff08;以 Ubuntu 为例&#xff09; 安装 PyQt5 可能会遇到的问题 一、环境相关问题 二、依赖问题 三、网络问题 四、安装工具问题 五、运行时问题 六、环境配置问…

单电源运放

我们经常看到很多非常经典的运算放大器应用图集&#xff0c;但是他们都建立在双电源的基 础上&#xff0c;很多时候&#xff0c;电路的设计者必须用单电源供电&#xff0c;但是他们不知道该如何将双电源 的电路转换成单电源电路。 在设计单电源电路时需要比双电源电路更加小…

大语言模型的算力共享体系中,Reduce、LayerNorm和Broadcast操作

目录 大语言模型的算力共享体系中,Reduce、LayerNorm和Broadcast操作 示例说明 1. 前向传播与梯度计算 2. All-Reduce操作(包含Reduce和Broadcast-like阶段) 3. LayerNorm的应用 示例中的顺序 结论 大语言模型的算力共享体系中,Reduce、LayerNorm和Broadcast操作 在…

计算机的错误计算(一百五十七)

摘要 探讨 MATLAB 中多项式的计算误差。 例1. 已知 计算 与 直接贴图吧&#xff1a; 另外&#xff0c;两个多项式的准确值分别为 7.13 与 4&#xff08;ISRealsoft 提供&#xff09;。这样&#xff0c;MATLAB 的输出均是错误的。 注&#xff1a;可参考计算机的错误计算&am…

Vben-Admin index.js 硬编码漏洞

0x01 产品描述: ‌Vben Admin‌是一个基于Vue3.0、