2014-09-01 36 views
2

我准备我的考试和我遇到一个奇怪上年实际考试问题跌跌撞撞:拆分临时变量重构实例

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

但是,为什么你这样做“在现实生活中”?还是有一些我看不到的深刻含义? 有什么想法?

预先感谢您:)

回答

0

您的重构是不正确的;每个-step变量确实是而不是取决于其他任何(注意,从date.gettemp的每个赋值都会覆盖之前的内容)。还清楚地表明除了最后的所有分配以及所有100的乘法都是无用的。

这个重构清楚地表明这些值是独立的,并且可以按任何顺序分配(即使并行,如果允许的话)。

+0

对不起,我在重新输入方法时实际犯了一个错误。每一步都依赖于以前的。看到更正。 所以问题仍然存在,审查员期望什么。 – Kezaer 2014-09-01 21:18:55