一、背景
最近 review 了一些代碼,其中有一個函數的寫法看著彆扭,而且對應同學不太清楚還可以怎麼優化。由於案例比較典型,值得分享一下。
本文給出對應的偽代碼和自己的修改建議,並推薦可以提交代碼質量的圖書,以便能夠幫助大家養成良好的編碼風格。
二、偽代碼
存在的問題
- 代碼行數有點多
- 構造參數、調用二方服務、結構判斷並執行大段邏輯之前沒有任何空行,導致看著不夠清晰
- 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 開發手冊》、《重構 -改善既有代碼的邏輯》、《代碼整潔之道》,代碼質量應該可以上升到一個新的臺階。