C# 有没有什么具体的原因让你不';不使用嵌套的if语句吗?
使用嵌套的if语句和使用一个包含大量参数的长if语句之间有区别吗 例如C# 有没有什么具体的原因让你不';不使用嵌套的if语句吗?,c#,java,php,c++,vb.net,C#,Java,Php,C++,Vb.net,使用嵌套的if语句和使用一个包含大量参数的长if语句之间有区别吗 例如 if ( var1 == var2 && var3 == var4 ) { //do something } 或 if ( var1 == var2 ) { if ( var3 == var4 ) { //do something } } 我想知道这样做是否有什么不同 谢谢,它们都做了同样的事情,但我个人认为嵌套更整洁,而且它还允许在嵌套if的任意一侧执行代码,这通常是必需的 if
if ( var1 == var2 && var3 == var4 )
{
//do something
}
或
if ( var1 == var2 )
{
if ( var3 == var4 )
{
//do something
}
}
我想知道这样做是否有什么不同
谢谢,它们都做了同样的事情,但我个人认为嵌套更整洁,而且它还允许在嵌套if的任意一侧执行代码,这通常是必需的
if ( var1 == var2 )
{
//do something here based on the first if but before second if
if ( var3 == var4 )
{
//do something
}
//do something here also which may be different based on the nested if result
}
但是如果您不需要它,那么您的第一个代码可能会稍微快一点,只需要一个if。一般来说,编译器将为这两个变体生成相同或几乎相同的代码。对于支持短路的解释语言(不评估| | |或&&的第二部分,当结果已经确定时),它也将是几乎相同的事情 我的建议是使用最清楚地表示您想要做什么的表格 例如,如果我们要检查两个坐标是否匹配:
if (x1 == x2 && y1 == y2)
Buf如果您的代码是这样的:
if (country_of_origin == "Sweden")
{
if (today == thursday)
{
...
}
}
可能更有意义…嗯,这取决于你的情况。如果它和你的一样,那么绝对没有必要选择第二条路
这是关于编写干净易读的代码-这样做就像是
if(condition1和&condition2)
您建议这两个条件对于以下代码片段是绝对必要的。不同的情况需要不同的解决方案:
if ( width == height && width == depth )
{
// Its a cube!
}
if ( x == y )
{
if ( p == q )
{
//do something for when x == y but p == q
} else {
//do something for when x == y but p != q
}
您不能概括什么构造应该使用或不应该使用-它们在某些情况下都是合适的。第二种样式允许检查需要独立于第一种if条件进行的检查 例如,如果您需要在(var3!=var4)但(var1==var2)仍然存在的额外条件下执行某些操作,则不可能执行以下操作: “如果(var1==var2&&var3==var4)” 因此,您需要类似以下内容:
if(var1 == var2){
if(var3 == var4){
}
//more code...
//... var3 & var 4 change...
//
if(var3 != var4){
}
}
正如评论员@Solace所说,它只允许更大的灵活性。第二种格式更灵活。假设只有当var1==var2时,才应该检查另一个条件。如果使用第一种格式,则必须再次检查var1==var2。在许多语言中,这两种代码将编译成相同的二进制文件。在大多数情况下,也不需要创建额外的缩进。我会在这个表单中使用嵌套的
if
,例如,如果有一个else
语句,它只依赖于var3==var4
条件。这都是关于可读性和编码风格的。尽量使代码简单易读。就性能而言,由于以下原因,这两个语句是相等的。问题的可能重复既是基于意见的问题,也是语言标签垃圾邮件的一个示例。在一种语言中正确的东西(如执行优化)在另一种语言中可能不一定正确。“可能快一点”
——您能这样概括所有标记的语言吗?诚然,尽管这个问题带有语言标签垃圾邮件的污点。在任何语言上输入都要快一点:)@HovercraftFullOfEels我标记了许多语言以获得快速响应,因为这个问题非常通用,与一种特定语言无关,除了vb.net,在那里你必须结束if语句…@KyleT:你不应该为了快速响应而发送垃圾标签。一种语言的答案通常不适用于另一种语言。第二部分当然与“else”相同,减少了计算量(当然,除非var3或var4发生了变化)。