條件語(yǔ)句
if-then語(yǔ)句
? 正常情況路徑在代碼中流向是否很分明鱼冀?
? if-then語(yǔ)句在出現(xiàn)等號(hào)時(shí)流向是否正確?
? else語(yǔ)句是否有必要?
? else語(yǔ)句正確嗎眷篇?
? if語(yǔ)句和else語(yǔ)句正確嗎?它們是否弄反了锨推?
? 正常情況是否跟在if后而非else后铅歼?
if-then-else語(yǔ)句
? 復(fù)雜的條件是否封裝成布爾函數(shù)調(diào)用了?
? 最常見(jiàn)情況放在前面嗎换可?
? 全部情況都覆蓋住了嗎椎椰?
? if-then-else語(yǔ)句是最好的選擇嗎?——用case語(yǔ)句代替是否更好沾鳄?
case語(yǔ)句
? 各情況的安排次序有含義嗎慨飘?
? 每種情況對(duì)應(yīng)的操作簡(jiǎn)單嗎?——如需要調(diào)用別的子程序译荞。
? case語(yǔ)句中的變量有實(shí)際意義嗎瓤的?它是為了用case語(yǔ)句而單純地定義出來(lái)的偽變量嗎?
? 缺省語(yǔ)句的用法是否合法(規(guī)范)吞歼?
? 用缺省語(yǔ)句檢查和報(bào)告異常情況嗎圈膏?
? 在C語(yǔ)言中,每一情況的結(jié)尾用了break了嗎篙骡?
關(guān)鍵思想
把條件稽坤、循環(huán)以及其他對(duì)控制流的改變做的越“自然”越好。運(yùn)用一種方式使讀者不用停下來(lái)重復(fù)讀你的代碼糯俗。
比較下面兩行代碼:
while( bytes_received < bytes_expected )
while( bytes_expected > bytes_received )
很明顯第一段代碼更容易讀尿褪,因?yàn)樽兞吭谇懊妫槐容^的值在前面得湘,具體規(guī)則如下:
比較的左側(cè) | 比較的右側(cè) |
---|---|
"被詢問(wèn)的“表達(dá)式杖玲,它的值更傾向于不斷變化 | 用來(lái)做比較的表達(dá)式,它的值更傾向于常量 |
if/else 中代碼塊的順序
- 首先處理正邏輯而不是負(fù)邏輯情況淘正。例如摆马,用 if(debug) 而不是 if(!debug)。
- 先處理掉簡(jiǎn)單情況鸿吆。這種方式可能還會(huì)使得 if 和 else 在屏幕之內(nèi)都可見(jiàn)今膊,its fine。
- 先處理有趣的或者是可疑的情況伞剑。
三目運(yùn)算符
三目運(yùn)算是為了將多行代碼縮減成一行,實(shí)際上實(shí)現(xiàn)效果一樣市埋,而且不容易調(diào)試黎泣。但是度量代碼的可讀性方法不是行數(shù)恕刘,而是人們理解它所需的時(shí)間,所以建議如下:
默認(rèn)情況下都使用 if/else抒倚,三目運(yùn)算符只有在最簡(jiǎn)單的情況下使用褐着。
提早結(jié)束循環(huán)
通常來(lái)講可以通過(guò)return,continue來(lái)提早返回減少嵌套托呕,使代碼更簡(jiǎn)潔含蓉。
摘抄字書(shū)【代碼大全】【編寫(xiě)可讀代碼的藝術(shù)】