如果"如果"是函数中的最后一个控制语句,它的块总是执行" return"然后我应该使用" else"?

时间:2015-08-17 19:08:47

标签: function if-statement language-agnostic return

考虑这段代码(用C语言来演示问题):

int foo1(int a)
{
    if(a)
         return 33;
    return 22;
}

int foo2(int a)
{
    if(a)
         return 33;
    else
         return 22;
}

如您所见,foo1(int a)foo2(int a)完全相同。 foo1(int a)较短,但我认为foo2(int a)更合乎逻辑(这只是我的印象)。哪一个更好?使用elseif这是功能代码中的最后一个控制语句并且它的块总是执行return是不是很好?

2 个答案:

答案 0 :(得分:1)

我不是特别了解C,但在C#中,至少约定是为else省略任何立即返回的if条件。原因是else已经暗示,因此显式添加它不仅是多余的,而且会增加后续代码的嵌套级别,从而使代码更难以阅读。以下面的代码为例。

public int Test()
{
    if (condition)
        return 0;
    else
    {
        var ex1 = doCmd1();
        var ex2 = doCmd2();
        var result = ex1 + ex2;
        return result;
    }
    Console.WriteLine("Here I'm printing before returning");
    return -1;
}

如果你只是简单地看一下这段代码,你可能会认为这种方法有三种方法可以退出。然而,事实并非如此 - 它只能以两种方式退出。 if-else之外的所有内容都完全无法访问。现在,这是相同的代码,但没有额外的else

public int Test()
{
    if (condition)
        return 0;

    var ex1 = doCmd1();
    var ex2 = doCmd2();
    var result = ex1 + ex2;
    Console.WriteLine("Here I'm printing before returning");
    return result;
}

阅读更加清晰,并快速确定操作结果将会是什么。

答案 1 :(得分:0)

我的观点是foo1更胜一筹。行

    return 22;
}

因为该函数的结尾胜过任何其他可读性问题。

foo2应该将FAPP视为

int foo2(int a)
{
    if(a){
         return 33;
    } else {
         return 22;
    }
}

return 22;行之前添加大约20行左右的代码,这是一个晦涩的错误来源,阻碍了可读性。