博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
步步为营 .NET 代码重构学习笔记 四、临时变量(Temporary Variable)
阅读量:7111 次
发布时间:2019-06-28

本文共 1888 字,大约阅读时间需要 6 分钟。

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、在第二次赋值处,重新声明原先那个临时变量。

示例

public void GetArea(double _height, double _width)        {            double temp = 2 * (_height + _width);            Console.WriteLine(temp);            temp = _width * _height;            Console.WriteLine(temp);        }

改为:

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、修改赋值语名,使其改为对新建之临时变量赋值。

示例

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

 

改为:

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

 

总结

尽量不要对参数进行操作,以一个临时变量取代它。

转载于:https://www.cnblogs.com/springyangwc/archive/2011/05/18/2050514.html

你可能感兴趣的文章
第十一章 非对称加密算法--DH
查看>>
特级教师总结的教育之33条(ZZ)
查看>>
AESwithJCE http://www.coderanch.com/how-to/content/AES_v1.html
查看>>
基于keepalived搭建MySQL的高可用集群
查看>>
linux磁盘空间查询
查看>>
autofs自动挂载
查看>>
手把手教你DIY一个春运迁徙图(一)
查看>>
mysql编码问题
查看>>
Python split()方法
查看>>
arcgis api for js入门开发系列九热力图效果
查看>>
BZOJ 2716: [Violet 3]天使玩偶 [CDQ分治]
查看>>
Python如何输出包含在对象中的中文字符?
查看>>
.NET Core项目从xproj+project.json向csproj迁移简介
查看>>
Tomcat指定特定JDK版本
查看>>
分离你的spring配置文件,让结构更清晰
查看>>
bzoj 4868: [Shoi2017]期末考试
查看>>
assetBundle打包脚本与LUA
查看>>
Spring的Hello World工程
查看>>
Java 8 新特性
查看>>
WPF 关于圆角的制作
查看>>