此代碼唯一的兌換質量是它的工作原理。你能幫我把結構更好嗎?優化嵌套if/then,java
0
A
回答
2
您可以通過去除一些重複的:
if (profile.isIgnoreCase()) {
masterKey = masterKey.toLowerCase();
masterValue = masterValue.toLowerCase();
}
if (masterKey.equals(targetKey)) {
if (masterValue.equals(targetValue)) {
doOK(masterKey, masterValue);
} else {
if (checkErrors) {
doError(masterKey, masterValue, targetValue);
}
}
}
我也刪除break
S作爲我並不像你需要他們給我
[更新]或者,如何編寫一個新的方法來處理比較
public boolean isEqual(String a, String b, boolean ignoreCase) {
if (ignoreCase) {
return a.equalsIgnoreCase(b);
} else {
return a.equals(b);
}
}
然後你會更新你的代碼,如下所示:
if (isEqual(masterKey,targetKey,profile.isIgnoreCase())) {
if (isEqual(masterValue,targetValue,profile.isIgnoreCase())) {
doOK(masterKey, masterValue);
} else {
if (checkErrors) {
doError(masterKey, masterValue, targetValue);
}
}
}
0
你可以把它縮短了通過與他們所代表的布爾值,即替換他們:masterKey.equalsIgnoreCase((targetKey))
與true
或false
。其中可能有助於使其更短,因爲你需要一個都不能少if
和else
條款。
0
不知道你是否需要休息一下。但我相信這完全等同於您的代碼。
bool ignoreCase = profile.isIgnoreCase();
if(ignoreCase and masterKey.equalsIgnoreCase(targetKey) or !ignoreCase and masterKey.equals(targetKey)) {
if(ignoreCase and masterValue.equalsIgnoreCase(targetValue) or !ignoreCase and masterValue.equals(targetValue)) {
doOK(masterKey, masterValue);
break;
} else if(checkErrors) {
doError(masterKey, masterValue, targetValue);
break;
}
}
或者我會寫在masterKey和masterValue類
public bool equalsCheckCase(targetKey, ignoreCase) {
if(ignoreCase) {
return this.equalsIgnoreCase(targetKey)
} else {
return this.equals(targetKey);
}
}
下面的函數因此,代碼示例變得更具可讀性。
bool ignoreCase = profile.isIgnoreCase();
if(masterKey.equalsCheckCase(targetKey, ignoreCase)) {
if(masterValue.equalsCheckCase(targetValue, ignoreCase)) {
doOK(masterKey, masterValue);
break;
} else if(checkErrors) {
doError(masterKey, masterValue, targetValue);
break;
}
}
2
將鍵和值比較拉出到局部變量中,可以消除重複的邏輯。這樣可以避免修改字符串,並且作爲獎勵使得if
語句在眼睛上更容易一些。
boolean keysMatch, valuesMatch;
if (profile.isIgnoreCase()) {
keysMatch = masterKey .equalsIgnoreCase(targetKey);
valuesMatch = masterValue.equalsIgnoreCase(targetValue);
} else {
keysMatch = masterKey .equals(targetKey);
valuesMatch = masterValue.equals(targetValue);
}
if (keysMatch) {
if (valuesMatch) {
doOK(masterKey, masterValue);
break;
} else {
// Key is either Missing or is an Error
if (checkErrors) {
doError(masterKey, masterValue, targetValue);
break;
}
}
}
0
bool ignoreCase = profile.isIgnoreCase();
if ((ignoreCase && masterKey.equalsIgnoreCase(targetKey)) ||
(!ignoreCase && masterKey.equals(targetKey))){
if ((ignoreCase && masterValue.equalsIgnoreCase(targetValue)) ||
(!ignoreCase && masterValue.equals(targetValue))) {
doOK(masterKey, masterValue);
break;
} else
if (checkErrors) {
doError(masterKey, masterValue, targetValue);
break;
}
}
應該是這樣的快讀布爾值,如果這個計算結果爲假,程序可以跳到下一個評估早於運行字符串比較第一。
相關問題
- 1. 嵌套ItemsControls優化
- 2. pyOpt嵌套優化
- 3. 優化嵌套循環
- 4. 來優化嵌套循環
- 5. MySQL的嵌套優化
- 6. 優化嵌套開關盒
- 7. 嵌套循環優化
- 8. 優化嵌套語句
- 9. Mysql嵌套查詢優化
- 10. 嵌套連接的優化
- 11. 優化嵌套Select查詢
- 12. SQL嵌套查詢優化
- 13. Coldfusion優化嵌套循環
- 14. 優化嵌套循環
- 15. 優化嵌套查詢
- 16. 優化嵌套if語句
- 17. 優化嵌套for循環
- 18. CUDA優化:嵌套循環
- 19. 嵌套循環優化
- 20. 如何優化嵌套if?
- 21. 使用LINQ優化嵌套循環
- 22. 需要優化嵌套查詢語句
- 23. 如何優化此嵌套分組?
- 24. 如何優化嵌套查詢?
- 25. 改進嵌套循環的優化
- 26. SQL留下嵌套查詢優化
- 27. 優化四重嵌套「for」循環
- 28. 如何優化嵌套循環?
- 29. 在嵌套C++循環優化乘數
- 30. 試圖優化PostgreSQL的嵌套其中
當然,您還需要確保targetKey/targetValue也是小寫。 – EboMike 2010-09-20 21:44:37
b當然 - 很好發現EboMike – irishbuzz 2010-09-20 21:46:42
好主意,但我們正在改變這裏的數據。 MaSteR密鑰可能是混合大小寫,這在後來在程序中變得相關。也許臨時變量..爲比較目的...嗯.. – JAM 2010-09-20 21:52:26