我正在准备我的考试,我偶然发现了一个奇怪的去年实际考试问题: 对这段代码执行拆分临时变量重构:
public int createUniqueCasenumber (GregorianCalendar date, int departmentID) {
int temp = 0;
temp = date.get(GregorianCalendar.DAY_OF_MONTH);
temp = temp * 100;
temp = temp + date.get(GregorianCalendar.MONTH);
temp = temp * 100;
temp = temp + date.get(GregorianCalendar.YEAR);
temp = temp * 100;
temp = temp + (date.get(GregorianCalendar.HOUR_OF_DAY) * departmentID);
return temp;
}
现在我将拆分临时变量重构理解为临时变量用于不同目的的情况,我们只需将其“重命名”为两个不同的有意义的名称。 但是在这种情况下我真的想不出聪明的名字,这个临时变量的作用有点类似于循环收集变量。
唯一接近所需重构的是:
public int createUniqueCasenumber (GregorianCalendar date, int departmentID) {
int result= 0;
int firstStep = 100 * date.get(GregorianCalendar.DAY_OF_MONTH);
int secondStep = 100 * (firstStep + date.get(GregorianCalendar.MONTH));
int thirdStep = 100 * (secondStep + date.get(GregorianCalendar.YEAR));
result = thirdStep + (date.get(GregorianCalendar.HOUR_OF_DAY) * departmentID);
return result;
}
但是您为什么要“在现实生活中”这样做呢?还是有什么我看不到的深层含义? 有什么想法吗?
提前谢谢你:)
最佳答案
您的重构不正确;每个-step
变量不依赖于任何其他变量(请注意,从 temp
到 date.get
的每个赋值都会覆盖之前的值)。还明确指出,除最后一个赋值外的所有赋值以及所有乘以 100 的赋值都是无用的。
这种重构清楚地表明这些值是独立的,并且可以按任何顺序分配(如果允许的话,甚至可以并行分配)。
关于java - 拆分临时变量重构示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25612898/