嵌套和級聯if-else有什麼區別?嵌套和級聯if-else有什麼區別
回答
這兩者是等價的:
if (condition1) block1
else if (condition2) block2
if (condition1) block1
else
{
if (condition2) block2
}
我相信他們也編到相同的組件,所以應該沒有什麼區別。
我要看你如何安排他們。嵌套的IF相當於增加一個和每個內部IFS的:
if(A) {
if(B) {
statement1
}
else if(C) {
statement2
}
}
等同於:
if(A and B) {
statement1
}
else if(A and C) {
statement2
}
我的建議是爭取可讀性和檢查你的邏輯。您可能會發現DeMorgan's Laws有助於重新安排您的邏輯。
這裏有一個總是讓我惱火:
if(A and B) {
statement1
statement2
}
else if(A and C) {
statement1
statement3
}
else if(not A) {
statement4
}
VS
if(A) {
statement1
if(B) {
statement2
}
else if(C) {
statement3
}
}
else if(not A) {
statement4
}
我只是不知道這是更具可讀性。它們在邏輯上等同。第一個更加表格化,更容易處理,但重複陳述1;第二個是更多的嵌套和有點醜陋(在我眼中),但不重複陳述。最終這是一個判斷的要求,因爲它對編譯器沒有任何影響。
在第一個版本中,你正在重複代碼,所以我一定會選擇實現第二個代碼,這也使得它在我看來更具可讀性。重複的線條更加膨脹。 – Dkyc 2013-12-05 10:30:39
嵌套if-then-else
控制結構是複雜邏輯規則的最小化翻譯。他們善於在檢查條件中避免冗餘。他們的主要缺點是,從長遠來看,這些結構可能會增長並使封閉方法變得過於龐大而複雜。打破嵌套if-then-else
塊的第一步是標準化。例如:
if (A) {
if (B || C) {
block 1;
} else {
if (!D) {
block 2;
}
}
} else {
block 3;
}
可以被歸一化到級聯if-then-else
if (A && (B || C) {
block 1;
return;
}
if (A && !B && !C && !D) {
block 2;
return;
}
if (!A) {
block 3;
}
我們已經消除else
塊和進行了進一步提取方法重構容易。所有這三個如果塊可以被提取到獨立的方法,它們的名稱以其執行的業務邏輯命名。
我喜歡這個想法,但我認爲那麼遠應該只用於保護子句而不是核心功能邏輯。此外,許多公司環境限制了函數可能具有的返回數量,因此這種方法可能無法實現。 – charlieb 2010-03-28 21:43:13
由於嵌套的if-then-else子句,我見過一段時間以後像癌症一樣增長的方法。當他們必須由許多人維護時,沒有人有勇氣或願意將它們分成幾種方法。 '規範化'使得這種重構成爲可能,並且使代碼更好。 – 2010-03-29 07:16:02
測試是勇氣的絕佳替代品。 – 2010-03-31 17:13:58
- 1. 嵌套數組和關聯數組有什麼區別?
- 2. 套接字級別的IPv4和IPv6有什麼區別嗎?
- 3. 在CSS中,級聯和繼承有什麼區別?
- 4. Hibernate EAGER提取和級聯類型有什麼區別
- 5. 活動和班級有什麼區別?
- 6. UI級別測試和API級別測試有什麼區別?
- 7. 嵌套if和&&之間有什麼區別?
- 8. 在oracle中嵌套表和對象類型有什麼區別?
- 9. 嵌套方法調用和代表之間有什麼區別?
- 10. 聲明嵌套表類型時,「AS」和「IS」有什麼區別?
- 11. 嵌套路徑和文件集有什麼區別?
- 12. 閉合和嵌套閉合有什麼區別?
- 13. 嵌套循環和遞歸函數有什麼區別?
- 14. 什麼是頂級類型和嵌套級別類型?
- 15. 嵌套級別
- 16. 縮短嵌套ifelse
- 17. 嵌套ifelse語句
- 18. 嵌套ifelse在R
- 19. 嵌套和非嵌套else/else ifs之間有區別嗎?
- 20. 有什麼區別`和$(Bash中有什麼區別?
- 21. 線程關聯和進程關聯有什麼區別?
- 22. javascript中兩個嵌套循環之間有什麼區別?
- 23. 高級和低級Java API有什麼區別?
- 24. 我的班級和我們班級的perl6有什麼區別?
- 25. 兩個TSQL聯接有什麼區別?
- 26. 有什麼區別? :和||
- 27. &&和||有什麼區別?
- 28. 「/」和「/ *」有什麼區別?
- 29. 有什麼區別:。!和:r!?
- 30. ==和===有什麼區別?
這不取決於特定的語言嗎?雖然我想不出一種不正確的語言,但我確實可以創建一個:-) – Rune 2010-03-28 21:18:34
+1編譯部分 – 2010-03-28 21:18:37
符文,你是對的! :)但是C語法現在已經接管了這個世界。在哪裏是沒有算術符號的舊cobol ... – abc 2010-03-28 21:24:19