條件語句
if-then語句
? 正常情況路徑在代碼中流向是否很分明?
? if-then語句在出現等號時流向是否正確?
? else語句是否有必要?
? else語句正確嗎?
? if語句和else語句正確嗎?它們是否弄反了?
? 正常情況是否跟在if后而非else后?
if-then-else語句
? 復雜的條件是否封裝成布爾函數調用了?
? 最常見情況放在前面嗎?
? 全部情況都覆蓋住了嗎?
? if-then-else語句是最好的選擇嗎?——用case語句代替是否更好?
case語句
? 各情況的安排次序有含義嗎?
? 每種情況對應的操作簡單嗎?——如需要調用別的子程序。
? case語句中的變量有實際意義嗎?它是為了用case語句而單純地定義出來的偽變量嗎?
? 缺省語句的用法是否合法(規范)?
? 用缺省語句檢查和報告異常情況嗎?
? 在C語言中,每一情況的結尾用了break了嗎?
關鍵思想
把條件、循環以及其他對控制流的改變做的越“自然”越好。運用一種方式使讀者不用停下來重復讀你的代碼。
比較下面兩行代碼:
while( bytes_received < bytes_expected )
while( bytes_expected > bytes_received )
很明顯第一段代碼更容易讀,因為變量在前面,被比較的值在前面,具體規則如下:
比較的左側 | 比較的右側 |
---|---|
"被詢問的“表達式,它的值更傾向于不斷變化 | 用來做比較的表達式,它的值更傾向于常量 |
if/else 中代碼塊的順序
- 首先處理正邏輯而不是負邏輯情況。例如,用 if(debug) 而不是 if(!debug)。
- 先處理掉簡單情況。這種方式可能還會使得 if 和 else 在屏幕之內都可見,its fine。
- 先處理有趣的或者是可疑的情況。
三目運算符
三目運算是為了將多行代碼縮減成一行,實際上實現效果一樣,而且不容易調試。但是度量代碼的可讀性方法不是行數,而是人們理解它所需的時間,所以建議如下:
默認情況下都使用 if/else,三目運算符只有在最簡單的情況下使用。
提早結束循環
通常來講可以通過return,continue來提早返回減少嵌套,使代碼更簡潔。
摘抄字書【代碼大全】【編寫可讀代碼的藝術】