C語言 衛語句取代巢狀條件式

2021-09-25 13:23:03 字數 1548 閱讀 4818

縮排波動拳!

函式中的條件邏輯使人難以看清正常的執行途徑。使用衛語句表現所有特殊情況。

動機:條件表示式通常有2種表現形式。第一:所有分支都屬於正常行為。第二:條件表示式提供的答案中只有一種是正常行為,其他都是不常見的情況。

這2類條件表示式有不同的用途。如果2條分支都是正常行為,就應該使用形如if……else……的條件表示式;如果某個條件極其罕見,就應該單獨檢查該條件,並在該條件為真時立刻從函式中返回。這樣的單獨檢查常常被稱為「衛語句」。

replace nested conditional with guard clauses (以衛語句取代巢狀條件表示式)的精髓是:給某個分支以特別的重視。它告訴閱讀者:這種情況很罕見,如果它真的發生了,請做一些必要的整理工作,然後退出。

if(condition)

// 接著寫else的業務邏輯**;

衛語句就是把複雜的條件表示式拆分成多個條件表示式,比如乙個很複雜的表示式,巢狀了好幾層的if - then-else語句,轉換為多個if語句,實現它的邏輯,這多條的if語句就是衛語句.

if(obj != null)

轉換成衛語句以後的**如下:

if(obj == null)

dosomething();

有時候條件式可能出現在巢狀n次才能真正執行,其他分支只是簡單報錯返回的情況,對於這種情況,應該單獨檢查報錯返回的分支,當條件為真時立即返回,這樣的單獨檢查就是衛語句(guard clauses).衛語句可以把我們的視線從異常處理中解放出來,集中精力到正常處理的**中。

修改前

void func(void)  

else

else

}

修改後

void func()  

if(isworktime())

rest();

}

修改前

double getpayamount()

else else else }}

return result;

}

修改後

double getpayamount()

if (isseparated())

if (isretired())

return normalpayamount();

}

函式中的if條件邏輯使人難以看清正常的分支執行路徑。使用衛語句表現所有特殊情況。

所謂衛語句,如果某個條件極其罕見,就應該單獨檢查該條件,並在該條件為真時立刻從函式中返回。這樣的單獨檢查常常被稱為「衛語句」。

4 5 以衛語句取代巢狀條件式

原 1 double getpayamount 28 else914 else 1520 else 2124 25 2627return result 28 以衛語句取代巢狀條件式 1 double getpayamount 27 if isseparated 811 if isretired 12...

C語言 衛語句

函式中的條件邏輯使人難以看清正常的執行途徑。使用衛語句表現所有特殊情況。動機 條件表示式通常有2種表現形式。第一 所有分支都屬於正常行為。第二 條件表示式提供的答案中只有一種是正常行為,其他都是不常見的情況。這2類條件表示式有不同的用途。如果2條分支都是正常行為,就應該使用形如if else 的條件...

C語言 if else語句巢狀

time limit 3000ms memory limit 10000kb accepted 5931 total submissions 11733 企業發放的獎金根據利潤提成。利潤 i 低於或等於10萬元時,獎金可提10 利潤高於10萬元,低於20萬元時,低於10萬元的部分按10 提成,高於1...