### 編程原則
- 我的觀點是:對于三種標準的結構化編程結構(順序、選擇、迭代)之外的任何控制結構的使用—也就是說,使用break, continue, return, throw–catch—都要持一種批判的態度。
—–Steven McConner
### 計算子程序中決策點的數量的技術:
- 從 1 開始, 一直往下通過程序;
- 一旦遇到以下關鍵字, 或者同類的詞, 就加1:if, while, for, repeat, and, or
- 給case子句中的每一種情況都加1.
### 如何處理復雜度的度量結果:
- 0-5 子程序可能還不錯.
- 6-10 得想辦法簡化子程序.
- 10+ 把子程序的某一部分拆分成另一個子程序并調用它.
### 如何對待代碼復審(詳查)?
- 你應該承認每一個所謂的缺陷, 然后繼續詳查. 承認一個批評并不意味著你認同批評的內 容.
- 在復查工作中, 你不應該試圖為正在被檢查的工作辯護.
- 在復查之后, 你可以獨自對每一個問題進行思考, 判斷它是否真的是一個缺陷.
—– Steven McConner << Code Complete 2nd>>
### 如何修正壞習慣?
不能用”沒有習慣”來代替”壞習慣” – 這就是人們驟然停止吸煙,停止咒罵或者停止多食是會很難受的原因.除非有了代替方法, 如嚼口香糖. 以新習慣來取代老習慣, 要比干脆戒除老習慣容易.
```java
——-Steven McConnel
private String convertCourse(double course) {
int c = (int) course / 90;
double y = course % 90;
String yf = nft.format(y);
String[][] directions=new String[][]{new String[]{"正北","北偏東"},
new String[]{"正東","東偏南"},
new String[]{"正南","南偏西"},
new String[]{"正西","西偏北"}};
int d=(y==0.0? 0:1);
return directions[c][d]+(d==0?"":yf+"度");
}
private String convertCourse(double course) {
int c = (int) course / 90;
double y = course % 90;
String yf = nft.format(y);
if (0 == c && 0 == y) {
return "正北";
} else if (0 == c) {
return "北偏東" + yf + "度";
}
if (1 == c && 0 == y) {
return "正東";
} else if (1 == c) {
return "東偏南" + yf + "度";
}
if (2 == c && 0 == y) {
return "正南";
} else if (2 == c) {
return "南偏西" + yf + "度";
}
if (3 == c && 0 == y) {
return "正西";
} else if (3 == c) {
return "西偏北" + yf + "度";
}
return "--";
}
```