衛語句

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();
}
相關文章
相關標籤/搜索