步步为营 .NET 代码重构学习笔记 四、临时变量(Temporary Variable)
Split Temporary Variable(剖解临时变量)
概述
程序中有某个临时变量被赋值超过一次,它既不是循环变量,也不是一个集用临时变量(collecting temporary variable)
动机(Motivation)
临时变量有各种不同用途,其中某些用途会很自然地导至临时变量被多次赋值.(循环变量)和(集用临时变量)就是两个典型例子:循环变量(loop variable)会随循环的每次运行而改变(例如 for(int i=0;i<10;i++))语句中的i);集用临时变量(collecting temporary variable)负责将(通过整个函数的运算)而构成的某个值收集起来.
作法(Mechanics)
1、在(待剖解)之临时变量的声明式及其第一次被赋值处,修改其名称。
如果稍后之赋值语句是i=j的某表达式形式,就意味着这是个集用临时变量,那么就不要剖解它。集用临时变量的作用通常是累加、字符串接合、写入stream或者向群集(collection)添加元素。
2、以该临时变量之第二次赋值动作为界,修改此前对该临时变量的所有引用点让它们引用新的临时变量。
3、在第二次赋值处,重新声明原先那个临时变量。
示例
1 2 3 4 5 6 7 | public void GetArea( double _height, double _width) { double temp = 2 * (_height + _width); Console.WriteLine(temp); temp = _width * _height; Console.WriteLine(temp); } |
改为:
1 2 3 4 5 6 7 | public void GetArea( double _height, double _width) { double temp = 2 * (_height + _width); Console.WriteLine(temp); double area = _width * _height; Console.WriteLine(area); } |
Remove Assignments to Parameters
概述
代码对一个参数进行赋值动作。
动机(Motivation)
首选,我们要确定大家都清楚(对参数赋值)这个说法的意思。如果你把一个名为foo的对象作为参数传给某个函数,那么(对参数赋值)意味改变foo,
使它引用另一个对象。
作法(Mechanics)
1、建立一个临时变量,把待处理的参数值赋予它。
2、以(对参数的赋值动作为界,将其后所有对此参数的引用点,全部替换为(对此临时变量的引用动作)。
3、修改赋值语名,使其改为对新建之临时变量赋值。
示例
1 2 3 4 5 6 7 | public int Discount( int inputVal, int quantity, int yeaarToDate) { if (inputVal > 50) inputVal -= 2; if (quantity > 100) inputVal -= 1; if (yeaarToDate > 10000) inputVal -= 4; return inputVal; } |
改为:
1 2 3 4 5 6 7 8 | public int Discount( int inputVal, int quantity, int yeaarToDate) { int result = inputVal; if (inputVal > 50) result -= 2; if (quantity > 100) result -= 1; if (yeaarToDate > 10000) result -= 4; return result; } |
总结
尽量不要对参数进行操作,以一个临时变量取代它。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架