[提问]关于IF语句嵌套的用法,哪种更好一点
请问以下两种用法,在性能优化和便于阅读上,哪种方法更好?我个人觉得方法2要便于阅读一些。但不清楚性能上与方法1有没有差别?
性能优化 c --------------------编程问答-------------------- 个人认为,这两种If完全没有可比性,第一个if条件成立才会去判断第二个,但是第二种,前后判断没有任何关系,主要还得看项目需求与实现。 --------------------编程问答-------------------- 我选方法二,把不满足的情况先排除掉,然后再执行。 --------------------编程问答-------------------- 干吗写的那么麻烦?
//方法1
if (a == 0)
{
//code...
if (b == 0)
{
//code...
if (c == 0)
{
//code...
}
}
}
//方法2
if (a != 0)
{
//code...
return;
}
if (b != 0)
{
//code...
return;
}
if (c != 0)
{
//code...
return;
}
if(a==0&&b==0&&c==0) --------------------编程问答-------------------- --------------------编程问答-------------------- 跟知识背景有关。
学过子句逻辑、特别是熟悉prolog等编程的人,对第二种非常熟练。第二种显得干净和科学,但是可能很多人不理解。这就像好多人不理解数理逻辑表达式是一样的。
子句逻辑是比较简单的,每一个句子中的各小段相互之间都是and关系。而不同子句之间,才是or关系。 --------------------编程问答-------------------- 我给你举个例子(我胡乱编得):
1. 长的像蘑菇但是有鲜艳的花的,并且茎显得细长的,是有毒的菌。
2. 长的像蘑菇但是没有鲜艳的花得,是无毒的菌。
3. 长的像蘑菇,茎短但是很粗的,是无毒的菌。
子句逻辑就是这样,一个句子中没有or关系,只有and关系。而不同句子之间才是or关系。这种句子可以直接上计算机进行逻辑推理。而且专门研究过计算机软件设计语言学和语用知识的人也比较容易接受。 --------------------编程问答-------------------- 不嵌套,对于逻辑程序来说,是一种很“自然”的设计。而涉及到嵌套的,用return以及高层次的系统控制逻辑来处理。在程序中永远没有嵌套在第二层次内的if...else....。
--------------------编程问答-------------------- 谢谢各位的分析解答,但还是不清楚两者在代码的执行效率上哪种要好一些? --------------------编程问答-------------------- 如果没有else,这两种可以互换,但有了else,就不能互换了,不能互换就不能做替代比较
不能做替代比较你的问题就没有意义了……
没有意义我也就不必回答了…… --------------------编程问答-------------------- 性能是编译器考虑的事情。
哪一种可读性更好不一定,看以下两个例子:
if (服务器存在)
{
打开服务器
if (服务器上的文件存在)
{
打开文件
if (文件类型正确)
{
读取数据
}
}
}
你要是写成
if (服务器不存在)
return;
打开服务器
if (服务器上的文件不存在)
return;
打开文件
...
看着多别扭
再比如
if (score < 60)
return "不及格"
if (score < 70)
return "及格"
if (score < 80)
return "中等"
if (score < 90)
return "良好"
else
return "优秀"
你非要写
if (score >= 60)
{
if (score >= 70)
{
if (score >= 80)
{
if (score >= 90)
{
return "优秀"
}
return "良好"
}
return "中等"
}
return "及格"
}
return "不及格"
是不是很不爽。
关键是看你的逻辑是递进关系还是并列关系 --------------------编程问答-------------------- 个人比较习惯于用第2种格式的,性能上相同功能的应该是一样吧 --------------------编程问答--------------------
if (服务器存在)
{
打开服务器
if (服务器上的文件存在)
{
打开文件
if (文件类型正确)
{
读取数据
}
else
msg="文件格式不正确"
}
else
msg="文件不存在"
}
else
msg="服务不存在";
同样不好看~~ --------------------编程问答-------------------- 我勒个去,我坚决不写这种多嵌套语句,我不想被后来者骂死 --------------------编程问答-------------------- 第二种要是想跟第一种等效,应该要改下code的位置吧
--------------------编程问答-------------------- 有时如果有else,用if..else嵌套也没办法吧
if (a != 0)
{
return;
}
//code...
if (b != 0)
{
return;
}
//code...
if (c != 0)
{
return;
}
//code...
将版主例子扩展如下
if(A服务器存在)
{
打开A
if(服务器A上存在文件F1)
{
打开文件F1
if(F1中存在.txt文件)
{
读取txt文件
}
else if(F1中存在.doc文件)
{
读取doc文件
}
}
else if(服务器上存在文件F2)
{
打开文件F2
...
}
}
else if(B服务器存在)
{
打开B
...
}
看上去逻辑比较别扭,但是实际应用中确实是存在这样的情况的。 --------------------编程问答-------------------- 想到了高中的逻辑组合,两个条件相与=两个条件的非相或
补充:.NET技术 , C#