如果"if"是函数中的最后一个控制语句并且它的块总是执行"return",那么我应该使用"else"吗?
If "if" is the last control statement in function and its block always executes "return", then should I use "else"?
考虑这段代码(用 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
?
我对 C 不了解,但至少在 C# 中,惯例是省略任何 if
立即 return 的条件的 else
。原因是 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;
}
这样阅读起来更清晰,并且可以快速确定操作的结果。
我认为 foo1 更胜一筹。行数
return 22;
}
因为函数的结尾胜过任何其他可读性问题。
foo2应该认为FAPP写成
int foo2(int a)
{
if(a){
return 33;
} else {
return 22;
}
}
在 return 22;
行之前添加大约 20 行代码,它是模糊错误和阻碍可读性的来源。
考虑这段代码(用 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
?
我对 C 不了解,但至少在 C# 中,惯例是省略任何 if
立即 return 的条件的 else
。原因是 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;
}
这样阅读起来更清晰,并且可以快速确定操作的结果。
我认为 foo1 更胜一筹。行数
return 22;
}
因为函数的结尾胜过任何其他可读性问题。
foo2应该认为FAPP写成
int foo2(int a)
{
if(a){
return 33;
} else {
return 22;
}
}
在 return 22;
行之前添加大约 20 行代码,它是模糊错误和阻碍可读性的来源。