考虑这段代码(用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)
更合乎逻辑(这只是我的印象)。哪一个更好?使用else
和if
这是功能代码中的最后一个控制语句并且它的块总是执行return
是不是很好?
答案 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行左右的代码,这是一个晦涩的错误来源,阻碍了可读性。