1.使用衛語句取代嵌套表達式程序員
函數中的條件邏輯令人難以看清正常的執行途徑。使用衛語句表現全部特殊狀況。編程
動機:條件表達式一般有2種表現形式。第一:全部分支都屬於正常行爲。第二:條件表達式提供的答案中只有一種是正常行爲,其餘都是不常見的狀況。編程語言
這2類條件表達式有不一樣的用途。若是2條分支都是正常行爲,就應該使用形如if…..else…..的條件表達式;若是某個條件極其罕見,就應該單獨檢查該條件,並在該條件爲真時馬上從函數中返回。這樣的單獨檢查經常被稱爲「衛語句」。函數
Replace Nested Conditional with Guard Clauses (以衛語句取代嵌套條件表達式)的精髓是:給某個分支以特別的重視。它告訴閱讀者:這種狀況很罕見,若是它真的發生了,請作一些必要的整理工做,而後退出。測試
「每一個函數只能有一個入口和一個出口」的觀念,根深蒂固於某些程序員的腦海裏。現今的編程語言都會強制保證每一個函數只有一個入口,至於「單一出口」規則,其實不是那麼有用。保持代碼清晰纔是最關鍵的:若是單一出口能使這個函數更清晰易讀,那麼就使用單一出口;不然就沒必要這麼作。rest
作法:一、對於每一個檢查,放進一個衛語句。衛語句要不就從函數返回,要不就拋出一個異常。it
二、每次將條件檢查替換成衛語句後,編譯並測試。若是全部衛語句都致使相同的結果,請使用 Consolidate Conditional Expression (合併條件表達式)。io
2.衛語句就是把複雜的條件表達式拆分紅多個條件表達式,好比一個很複雜的表達式,嵌套了好幾層的if - then-else語句,轉換爲多個if語句,實現它的邏輯,這多條的if語句就是衛語句.編譯
3有時候條件式可能出如今嵌套n次才能真正執行,其餘分支只是簡單報錯返回的狀況,對於這種狀況,應該單獨檢查報錯返回的分支,當條件爲真時當即返回,這樣的單獨檢查就是衛語句(guard clauses).衛語句能夠把咱們的視線從異常處理中解放出來,集中精力到正常處理的代碼中。date
例以下列代碼:
void func(void) { if (IsWorkDay()) { printf("Error,is work day"); } else { if (IsWorkTime()) { printf("Error ,is work time"); } else { rest(); } } }
使用衛語句替換之後
void func() { if (IsWorkDay()) { printf("Error,is work day"); return; } if (IsWorkTime()) { printf("Error,is work time"); return; } rest(); }