## 第七章 把控制流變得易讀
### 1.條件語句中的參數的順序
比較的左側放置傾向于變化的,比較的右側是放置不變化的
```
if(age > 18) 比 if(18 < age) 更加清晰
```
### 2.if/else語句塊的順序
雖然if/else語句的順序可以隨意調換愈案,但是遵循下面的規(guī)則會使代碼更加清晰:
- 首先處理正邏輯,不先處理負邏輯变勇。如if(debug) 好于 if(!debug)。
- 先處理簡單的邏輯贴唇。
- 先處理有趣或者可疑的情況搀绣。
### 3.避免使用三目運算符
所有的三目運算符形式都可以寫成if/else形式。
**關鍵思想:只有當最簡單的情況可以使用三目運算符戳气。**
### 4.避免使用do链患、while循環(huán)
### 5.從函數中提前返回
編寫如下代碼:
```
public boolean constains(String string,String subStr) {
if(string == null || subStr == null ){
return false;
}
if(string.equals(subStr)) {
return true;
}
}
```
### 6.最小化嵌套
嵌套很深的代碼很難理解,如下代碼:
```
if(userResult == SUCCESS) {
if(permissonResult != SUCCESS) {
reply.write("permissonResult error");
reply.done();
return;
}
reply.write("");
} else {
reply.write(userResult);
}
reply.done();
```
最初代碼是簡單的:
```
if(userResult == SUCCESS) {
reply.write("");
} else {
reply.write(userResult);
}
reply.done();
```
但是后來又添加個一個新的邏輯瓶您,代碼變成了下面這樣:
```
if(userResult == SUCCESS) {
if(permissonResult != SUCCESS) {
reply.write("permissonResult error");
reply.done();
return;
}
reply.write("");
} else {
reply.write(userResult);
}
reply.done();
```
**關鍵思想:當你對代碼修改時麻捻,從全新的角度來審視,從整體上來看修改后的影響呀袱。**
可以通過提早返回來減少嵌套:
```
if(userResult != SUCCESS) {
reply.write(userResult);
reply.done();
return;
}
if(permissonResult != SUCCESS) {
reply.write("permissonResult error");
reply.done();
return;
}
reply.write("");
reply.done();
```
如何減少循環(huán)內的嵌套贸毕,在循環(huán)中可以使用continue來進實現類似提前返回的效果
```
for(int i = 0; i < results.size(); i ++){
if(results[i] == null) continue;
count++;
if(results[i].getName().equals("")) continue;
print(results[i].getName());
}
```
###總結
- 寫一個比較的時候,把改變的值寫在左邊并且把更穩(wěn)定的值寫在右側夜赵。
- 重新排列if/else語句明棍。通常來講,先處理正確的寇僧、簡單的摊腋、有趣的情況。
- 避免使用三目運算符嘁傀、do/while循環(huán)兴蒸。
- 減少代碼的嵌套。盡量寫的更加線性细办。