如果我不使用else条件,有什么区别

时间:2010-07-23 07:55:59

标签: c#

这两个例子之间有什么区别:

if(firstchek)
{
    if(second)
    {
     return here();
    }
    else
    {
    return here();
    }
}

和此:

if(firstcheck)
{
    if(second)
    {
     return here();
    }
      return here();
    // else code without else
}
// code without else
// else code is here 
     return here();

6 个答案:

答案 0 :(得分:12)

此代码:

if (someCondition)
{
    foo();
    return;
}
bar();
return;

与此相同:

if (someCondition)
{
    foo();
}
else
{
    bar();
}
return;

唯一的区别在于可读性。有时一种方式更易读,有时另一种方式。请参阅Refactoring: Replace Nested Conditional with Guard Clauses

嵌套条件

double getPayAmount() {
    double result;
    if (_isDead) result = deadAmount();
    else {
        if (_isSeparated) result = separatedAmount();
        else {
            if (_isRetired) result = retiredAmount();
            else result = normalPayAmount();
        };
    }
    return result;
};

警卫条款

double getPayAmount() {
    if (_isDead) return deadAmount();
    if (_isSeparated) return separatedAmount();
    if (_isRetired) return retiredAmount();
    return normalPayAmount();
};  

答案 1 :(得分:2)

假设没有其他代码,代码路径和执行的内容没有区别。

通常,主要区别在于,在指定else子句时,只有在if中的表达式求值为false时才会运行。如果您未指定,则代码始终运行。

<强>更新

此:

if(second)
{
 return here();
}
else
{
return here();
}

而且:

if(second)
{
 return here();
}
return here();

与此相同:

return here();

为什么呢?因为无论second评估的是什么,你都在做同样的事情,所以检查是多余的。

答案 2 :(得分:1)

这两组代码在语义上是相似的。也就是说他们将在运行时执行相同的操作。但是,您是否应该使用某种形式取决于具体情况。除了所需的语义之外,您的代码还应表达您的意图。

如果代码的意图是做一个或另一个,那么保留其他所以你的意图是明确的。 E.g。

if (withdrawAmmount < accountBalance)
{
    return Deduct();
}
else
{
    return ArrangeCredit();
}

如果意图是在特殊情况下做第一件事,那么随意省略其他。 E.g。

if (parameter == null)
{
    return NothingToDo();
}

return PerformActions();

为了可维护性,你应该考虑删除return语句是否会改变行为和代码,因为有些白痴会这样做(可能是我)。

还应该注意,使用else,代码执行相同而没有返回但没有返回省略else将导致代码行为不同。

答案 3 :(得分:0)

使用第一个代码运行某些内容,无论second是否为定义值。它只取决于它是否是一个定义的值。如果是你运行一点代码。如果不是那么你又跑了另一个。对于第二个示例,如果second是定义的值,则只运行代码。

答案 4 :(得分:0)

在第一种情况下,如果第二个变量为false,则else部分仅执行。 在第二种情况下,总是执行省略else的部分(假设在两种情况下firstcheck都为真)。

答案 5 :(得分:0)

您的代码包含太多的返回语句,我觉得这些语句重复,例如

if(firstchek) 
{ 
    if(second) 
    { 
     return here(); 
    } 
    else 
    { 
    return here(); 
    } 
} 

以上等于

if(firstchek) 
{         
   return here();         
} 

因为here()是相同的函数调用。第二个例子

 if(firstcheck)     
    {     
        if(second)     
        {     
         return here();     
        }     
          return here();     
        // else code without else     
    }     
    // code without else     
    // else code is here      
         return here();   

等于

if(firstcheck)     
{     
   return here();     
}
 return here(); 

在第一个示例中,如果示例后面有一些语句,如果条件失败则返回顶级语句,那么后面的语句将被执行示例

 if(firstchek) 
    { 
        if(second) 
        { 
         return here(); 
        } 
        else 
        { 
        return here(); 
        } 
    } 

CallMyCellNo();

如果toplevel if条件失败,将调用CallMyCellNo()。

在第二个示例中,您在toplevel if语句之后返回here(),因此无论if条件的返回值如何,函数执行都将终止。