一、背景
最近 review 了一些代碼,其中有一個函數的寫法看着别扭,而且對應同學不太清楚還可以怎麼優化。由于案例比較典型,值得分享一下。
本文給出對應的僞代碼和自己的修改建議,并推薦可以送出代碼品質的圖書,以便能夠幫助大家養成良好的編碼風格。
二、僞代碼
public void doSomething(){
// 構造參數(後無空格)
// 調用二方服務(後無空格)
if(result.success && result.getXXXMap() != null && result.getXXXMap().get("aaa") != null){
// 執行一大段邏輯
}
}
存在的問題
- 代碼行數有點多
- 構造參數、調用二方服務、結構判斷并執行大段邏輯之前沒有任何空行,導緻看着不夠清晰
- if 判斷部分搞得有些複雜,需要多看幾眼才能看懂
三、修改
修改意見
- 每個步驟中間加個空格,提升段落感
- 将成功後的處理提取成一個獨立的函數,降低函數長度
- 将判斷所需的map 提取成局部變量,讓判斷更加簡潔
- 将防禦性判斷寫在代碼執行之前,邏輯更清晰
public void doSomething(xxx){
// 構造參數(後空格一行)
// 調用二方服務(後空格一行)
if(result.success ){
other();
}
}
// other 隻是一個demo, 實操時命名符合意圖
private void other(yyy){
Map<K,V> map = result.getXXXMap() ;
if( null == map && null == map.get("aaa")){
return;
}
// 執行業務邏輯
}
當然,如果有必要 前面的 result.success 也可以反向判斷直接 return 。
這裡的 “aaa” 隻是一個舉例,實際并不是簡單的字元串,是以暫時不處理。
如果是普通字元串的話,建議定義為常量。
這樣修改完畢可讀性就提高了很多,代碼非常清晰。
四、總結
這個案例非常簡單,希望能夠幫助大家養成良好的代碼風格,提高代碼可讀性,讓讀者看起來更清爽。
另外《代碼精進之路 從碼農到工匠》中有提到【寫代碼是兩次創作】
優雅的代碼很少是一次形成的,大部分情況下要經過兩次創造:第一遍實作功能,第二遍重構優化。
是以,實作功能以後,在代碼審查階段,如果有時間建議盡量對代碼進行優化。
另外推薦閱讀《阿裡巴巴Java 開發手冊》、《重構 -改善既有代碼的邏輯》、《代碼整潔之道》,代碼品質應該可以上升到一個新的台階。