这不是关于链式 ifs 或 ifs 和 else ifs 的问题。我已经在 SO 中看到了很多这样的问题。
我的问题也是不是关于性能,更多是关于编码标准和可读性。
考虑以下琐碎的伪代码我在我正在从事的项目中看到了很多:
if (expression > 0)
{
return 1;
}
else if (expression < 0)
{
return -1;
}
else
{
return 0;
}
我通常以稍微不同的方式编写这种结构:
if (expression > 0)
{
return 1;
}
if (expression < 0)
{
return -1;
}
return 0;
当然还有第三种选择,规则是没有方法应该有多个return语句,当方法的复杂性很低时,我发现这种语句过于严格和繁琐:
int retVal;
if (expression > 0)
{
retVal = 1;
}
else if (expression < 0)
{
retVal = -1;
}
else
{
retVal = 0;
}
return retVal;
在编写这些类型的构造时,上面列出的选项之一是否更正确?性能明智我知道选择完全无关紧要,但从可读性的角度来看,我更喜欢避免使用 if - else if 语句。也就是说,许多同事不同意我的意见,即使他们不能给我任何有说服力的论据。
答案 0 :(得分:1)
考虑
return expression < 0? -1:
expression > 0? +1:
0;
一般来说,它在很大程度上取决于偏好和语义。
如果所有三种情况(>0
,<0
,==0
)都有些对称,那么您的第一个选项对我来说很有用。
如果默认路径应该返回0
,并且案例>0
,<0
是特殊/例外的,我会选择第二个选项。
答案 1 :(得分:1)
有很多方法。您可以采用您展示的两种方法之一。你可以这样做:
if (expression == 0)
{
return 0;
}
return expression < 0 ? -1 : 1;
或完全使用三元运算符:
return expression == 0
? 0
: expression < 0 ? -1 : 1;
另一个选择是使用功能方法,例如offered by my own SuccincT library并执行:
return expression.Match().To<int>()
.Where(e => e < 0).Do(-1)
.Where(e => e > 0).Do(1)
.Else(0).Result();
这完全是一个偏好问题,而且确实没有正确答案。
答案 2 :(得分:0)
我想
int retVal = 0;
if (expression > 0)
{
retVal = 1;
}
if (expression < 0)
{
retVal = -1;
}
return retVal;
这看起来不是性能正确的,并且每次进行条件匹配时都会有理由。
相反,在以下情况下,这将匹配,直到找到正确的条件并忽略休息
if (expression > 0)
{
return 1;
}
else if (expression < 0)
{
return -1;
}
else
{
return 0;
}
我认为if / else if / else是否优于性能 为了便于阅读,您也可以选择使用 案件 我认为性能明智,否则如果是比多个ifs更好的选择
答案 3 :(得分:-1)
正如问题中提到的那样 “我的问题也不是关于性能,而是关于编码 标准和可读性。“
你可以使用三元运算符来表示if和then的情况,但如果你使用三元运算符检查多个条件,它将无法保持可读性。
return expression > 0 ? -1 : 0;
对于具有多项检查的条件,请使用if和else-if,如您在问题中提供的那样。
if (expression > 0)
{
return 1;
}
else if (expression < 0)
{
return -1;
}
else
{
return 0;
}
在收到@Chris和@InBetween
的评论后,此答案已更新