在return语句前使用if/else与只使用if的区别
本文关键字:if 区别 else 语句 return | 更新日期: 2023-09-27 18:05:56
我发现很难搜索这个问题。
else语句在下面的代码中有什么不同吗?
public string Test()
{
if (statement) return "a";
else return "b";
}
在这种情况下什么是好的实践?
不,在这种情况下没有任何区别,因为如果if语句为真,它将返回并且无论if如何都不会转到return "b";
行。
在这种情况下,我通常省略else,但我不知道这是否是大多数人在这种情况下会做的。
没有区别,实际上它们都编译成相同的IL:
public bool GetValue(bool input)
{
if (input) return true;
return false;
}
IL_0000: ldarg.1
IL_0001: brfalse.s IL_0005
IL_0003: ldc.i4.1
IL_0004: ret
IL_0005: ldc.i4.0
IL_0006: ret
:
public bool GetValue2(bool input)
{
if (input)
return true;
else
return false;
}
IL_0000: ldarg.1
IL_0001: brfalse.s IL_0005
IL_0003: ldc.i4.1
IL_0004: ret
IL_0005: ldc.i4.0
IL_0006: ret
else可能是不必要的,但我个人认为这是为了增加一点可读性和平衡if逻辑而付出的小代价。
没有区别,编译器可能会在两种情况下发出相同的信息。顺便说一句,对于像您的示例这样的小检查,您总是可以使用以下(条件运算符):
public string Test()
{
return statement ? "a" : "b";
}
代码越清晰越好。
我个人认为,在大多数情况下,冗余的else使代码更清晰,但其他人可能有不同的感觉。
无论哪种方式,我个人都会在if/else中使用括号,但其他人可能会觉得这会使代码过于冗长。
public string Test()
{
if (statement)
{
return "a";
}
else
{
return "b";
}
}
或
public string Test()
{
if (statement)
{
return "a";
}
return "b";
}
没有区别,但在这种特殊情况下,我的偏好是:
public string Test() {
return statement ? "a" : "b";
}
在任何情况下,我都不会保留else语句,但这主要是因为我使用ReSharper,它模糊了else语句,我对这类事情有点强迫症。
我通常更喜欢没有else
的变体。虽然它们在功能上相同,但else
版本有时会导致大量缩进。
public string Test() {
if (statement)
return "a";
return "b";
}
对于这样一个简单的情况,任何一种变体都没有什么错,但是将它与(例如)在函数开始时进行四次检查(伪代码)进行对比:
define fn():
if error condition 1:
handle error 1
else:
if error condition 2:
handle error 2
else:
if error condition 3:
handle error 3
else:
if error condition 4:
handle error 4
else:
do something
相对于:
define fn():
if error condition 1:
handle error 1
return
if error condition 2:
handle error 2
return
if error condition 3:
handle error 3
return
if error condition 4:
handle error 4
return
do something
在我看来,后者是"更干净"的代码。
这没什么区别。你应该怎么写就怎么写。
不…如果代码中没有else,它将执行相同的操作
No。它们在逻辑上是相同的。
if(xx) return; else return;
if(xx) return;
return;