Java重构示例一
本文通过Java示例代码片段展示了常用重构原则和技巧,供初级开发人员参考。精致的代码能够清楚传达作者的意图,精致的代码是最好的注释,精致的代码非常容易维护和扩展。程序员阅读精致的代码如同大众欣赏优美的散文一样享受。
1 尽量简洁
1.1 重构前
if ( flag == 1 ){ return true; } else{ return false; }
|
1.2 重构后
return flag == 1;
|
2 使用三位运算符
2.1 重构前
if ( "Male".equals(gender) ) { return "Mr."; } else{ return "Mrs."; }
|
2.2 重构后
return "Male".equals(gender) ? "Mr." : "Mrs.";
|
3 使用常量替换硬编码
3.1 重构前
for (int i = 0; i < 12; i++) { this.getDays(i); //skip... }
|
3.2 重构后
int YEAR_MONTHS = 12; for (int month = 0; month < Month.YEAR_MONTHS; month++) { this.getDays(month); //skip... }
|
4 使用方法替换反复出现的表达式
4.1 重构前
public boolean isStartAfter(Date date) { Calendar calendar = BusinessCalendar.getCalendar(); calendar.setTime(date); int hour = calendar.get(Calendar.HOUR_OF_DAY); int minute = calendar.get(Calendar.MINUTE);
return ( (hour<fromHour) || ( (hour==fromHour) && (minute<=fromMinute) ) ); }
public boolean includes(Date date) { Calendar calendar = BusinessCalendar.getCalendar(); calendar.setTime(date); int hour = calendar.get(Calendar.HOUR_OF_DAY); int minute = calendar.get(Calendar.MINUTE);
return ( ( (fromHour<hour) || ( (fromHour==hour) && (fromMinute<=minute) ) ) && ( (hour<toHour) || ( (hour==toHour) && (minute<=toMinute) ) ) ); }
|
4.2 重构后
private boolean tailGreatHead(int headHour, int headMinute, int tailHour, int tailMinute, boolean includeEqual) { boolean tailGreatHeadHour = (headHour < tailHour); boolean tailEqualHeadHour = (headHour == tailHour); boolean tailGreatHeadMinute = (headMinute < tailMinute); boolean tailEqualHeadMinute = (headMinute == tailMinute);
boolean tailGreatEqualHeadMinute = tailGreatHeadMinute || includeEqual && tailEqualHeadMinute;
return (tailGreatHeadHour || (tailEqualHeadHour && tailGreatEqualHeadMinute)); }
private boolean tailGreatHead(int headHour, int headMinute, int tailHour, int tailMinute) { return tailGreatHead(headHour, headMinute, tailHour, tailMinute, false); }
private boolean tailGreatEqualHead(int headHour, int headMinute, int tailHour, int tailMinute) { return tailGreatHead(headHour, headMinute, tailHour, tailMinute, true); }
public boolean isStartAfter(Date date) { Calendar calendar = BusinessCalendar.getCalendar(); calendar.setTime(date); int hour = calendar.get(Calendar.HOUR_OF_DAY); int minute = calendar.get(Calendar.MINUTE);
return this.tailGreatEqualHead(hour, minute, fromHour, fromMinute); }
public boolean includes(Date date) { Calendar calendar = BusinessCalendar.getCalendar(); calendar.setTime(date); int hour = calendar.get(Calendar.HOUR_OF_DAY); int minute = calendar.get(Calendar.MINUTE);
return this.tailGreatEqualHead(fromHour, fromMinute, hour, minute) && this.tailGreatEqualHead(hour, minute, toHour, toMinute); }
|
5 及早结束非正常逻辑
5.1 重构前
int count = 0; if(taskList != null && !taskList.isEmpty()){
//skip...
return count; } else { return count; }
|
5.2 重构后
int count = 0; if(taskList == null || taskList.isEmpty()){ return 0; }
//skip...
return count;
|
<!--EndFragment-->
源地址:http://passport.baidu.com/?business&aid=6&un=%B2%DC%CB%C9%C7%E0#7