控制語句


1. 【強制】在一個switch 區塊內,每個case 要麼透過break / return 等來終止,要麼註解說明程序將繼續執行到哪一個case 為止; 在一個switch 區塊內,都必須包含一個default 語句並且放在最後,即使它什麼程式碼也沒有。


2. 【強制】在if / else / for / while / do 語句中必須使用大括號,即使只有一行程式碼,避免使用下面的形式: if (condition) statements;


#3. 【建議】建議盡量少用else ,  if - else 的方式可以改寫成:

if(condition){
...
return obj;
}

// 接著寫else 的業務邏輯代碼;

說明:如果非得使用if()...else if()...else... 方式表達邏輯,【強制】請勿超過3 層,超過請使用狀態設計模式。

正例:邏輯上超過 3 層的 if-else 程式碼可以使用衛語句,或是狀態模式來實作。


4. 【推薦】除常用方法(如getXxx/isXxx)等外,不要在條件判斷中執行其它複雜的語句,將復雜邏輯判斷的結果賦值給一個有意義的布林變數名,以提高可讀性。

說明:很多if 語句內的邏輯相當複雜,閱讀者需要分析條件表達式的最終結果,才能明確什麼

樣的條件執行什麼樣的語句,那麼,如果閱讀者分析邏輯表達式錯誤呢?

正例:

//伪代码如下
boolean existed = (file.open(fileName, "w") != null) && (...) || (...);
if (existed) {
...
}

反例:

if ((file.open(fileName, "w") != null) && (...) || (...)) {
...
}

5. 【推薦】循環體中的語句要考慮效能,以下操作盡量移至循環體外處理,例如定義物件、變數、取得資料庫連接,進行不必要的try - catch 操作( 這個try - catch 是否可以移至循環體外) 。


6. 【推薦】介面入參保護,這種場景常見的是用來做批次操作的介面。


7. 【參考】方法中需要進行參數校驗的場景:

1 ) 呼叫頻次低的方法。

2 ) 執行時間開銷很大的方法,參數校驗時間幾乎可以忽略不計,但如果因為參數錯誤導致中間執行回退,或者錯誤,那得不償失。


3 ) 需要極高穩定性和可用性的方法。

4 ) 對外提供的開放接口,不管是 RPC / API / HTTP 接口。

5) 敏感權限入口。


8. 【參考】方法中不需要參數校驗的場景:

1 ) 極有可能被循環呼叫的方法,不建議對參數進行校驗。但在方法說明裡必須註明外部參數檢查。

2 ) 底層的方法呼叫頻度都比較高,一般不校驗。畢竟是像純淨水過濾的最後一道,參數錯誤不太可能到底層才會暴露問題。一般 DAO 層與 Service 層都在同一個應用程式中,部署在同一台伺服器中,所以 DAO 的參數校驗,可以省略。

3 ) 被宣告成private 只會被自己程式碼所呼叫的方法,如果能夠決定呼叫方法的程式碼傳入參考數已經做過檢查或肯定不會有問題,此時可以不校驗參數。


#