嵌套和级联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. UI级别测试和API级别测试有什么区别?
- 3. 闭合和嵌套闭合有什么区别?
- 4. 嵌套循环和递归函数有什么区别?
- 5. 什么是顶级类型和嵌套级别类型?
- 6. 嵌套级别
- 7. 缩短嵌套ifelse
- 8. 嵌套ifelse在R
- 9. 有什么区别`和$(Bash中有什么区别?
- 10. 线程关联和进程关联有什么区别?
- 11. javascript中两个嵌套循环之间有什么区别?
- 12. 两个TSQL联接有什么区别?
- 13. ==和===有什么区别?
- 14. ==和===有什么区别?
- 15. 有什么区别? :和||
- 16. ==和===有什么区别?
- 17. '=='和'==='有什么区别?
- 18. `&`和`ref`有什么区别?
- 19. 有什么区别:。!和:r!?
- 20. | 0和~~有什么区别?
- 21. Appender和〜有什么区别?
- 22. POSIX套接字和BSD套接字有什么区别?
- 23. 在R中创建没有嵌套ifelse的大小类别
- 24. 级联使用嵌套流
- 25. 辅助功能级别:受保护级别和私有级别有什么区别
- 26. Java中的multiway和嵌套if语句之间有什么区别?
- 27. Scala的内部类和Java的内部/嵌套类有什么区别?
- 28. 嵌套模块定义和在ruby中使用::定义有什么区别?
- 29. xtype和别名有什么区别?
- 30. C#中公共嵌套类和私有嵌套类之间的区别是什么
这不取决于特定的语言吗?虽然我想不出一种不正确的语言,但我确实可以创建一个:-) – Rune 2010-03-28 21:18:34
+1编译部分 – 2010-03-28 21:18:37
符文,你是对的! :)但是C语法现在已经接管了这个世界。在哪里是没有算术符号的旧cobol ... – abc 2010-03-28 21:24:19