天天看點

一個簡單的代碼風格優化的小案例一、背景二、僞代碼三、修改四、總結

一、背景

最近 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 開發手冊》、《重構 -改善既有代碼的邏輯》、《代碼整潔之道》,代碼品質應該可以上升到一個新的台階。