Total Pageviews

2015/08/16

[Programming] 提高控制流程可讀性

最近閱讀了易讀程式之美一書,在提高控制流程可讀性此章節提到幾個重點

  1. 在使用if-else判斷式時,先處理肯定條件;先處理簡單的情況,必較能在畫面中同時呈現if與else區塊,在閱讀上很有幫助;先處理比較有趣或明顯的情況
  2. 縮短其他人理解程式所需的時間,比減少程式碼行數來得重要
  3. 只有在最簡單的情況下使用三元運算子(ternary operator),複雜的情況還是盡量使用if / else
  4. 避免使用do / while loop
  5. C++的創造者Bjarne Stroustrup說,在我的個人經驗裡,do / while 敘述經常是錯誤與誤解的來源,我寧願把條件式列在最前面,總而言之,我會盡量避免使用do / while 敘述
  6. 修改程式碼時要以全新的角度審視,退一步以整體的角度考慮程式碼
  7. 盡量消除loop中的巢狀結構,因為巢狀結構可讀性較差


Example1. 如果是很簡單的情況,用ternary operator是ok的
1
timeStr += (hour >= 12) ? "pm" : "am";

若是遇到較複雜的狀況,如下:
1
int result = exponent >= 0 ? mantissa * (1 << exponent) : mantissa * (1 << -exponent);

則建議將上述的表示方式改用if-else的方式表達
1
2
3
4
5
if (exponent >= 0) {
 result = mantissa * (1 << exponent);
} else {
 result = mantissa * (1 << -exponent);
}


Example2. 盡量避免用do-while

如原本為do-while的表示方式
1
2
3
4
5
int sum = 0;
int count = 1;
do {
    sum += count++;
} while (count <= 10);

除非有什麼特別原因,盡量改成while-loop
1
2
3
4
int sum = 0, count = 1;
while (count <= 10) {
 sum += count++;
}









No comments: