哪个将更易于维护?
if (a == b) c = true; else c = false;
要么
c = (a == b);
我尝试在“代码完成”中查找,但是找不到答案。
我认为第一个更具可读性(您可以从字面上大声读出来),我也认为这使其更易于维护。第二个当然更有意义并减少了代码,但是我不确定它对于C#开发人员是否可维护(我希望在Python中会更多地看到这种用法)。
c = a==b ? true : false;
哪个将更易于维护?
if (a == b) c = true; else c = false;
要么
c = (a == b);
我尝试在“代码完成”中查找,但是找不到答案。
我认为第一个更具可读性(您可以从字面上大声读出来),我也认为这使其更易于维护。第二个当然更有意义并减少了代码,但是我不确定它对于C#开发人员是否可维护(我希望在Python中会更多地看到这种用法)。
c = a==b ? true : false;
Answers:
第二种选择更好。
有绝对的理由要警惕聪明的编程快捷方式,因为它们会使代码的意图模糊不清,从而损害了可维护性。所以,我不怪你问这个问题。
但是,我不认为c = (a == b);
这是一个巧妙的窍门。这是一个简单概念的直接表示。尽可能直接。
一个适当的“维护”您的第一个例子中的格式(不缺少括号和一个线结构,这是我做的认为一个聪明的快捷方式)会产生这样的代码:
if (a == b)
{
c = true;
}
else
{
c = false;
}
以我的经验,以这种冗长且易于出错的方式编写简单的布尔逻辑是“无用”代码的标志。这会让我想知道在此代码库中如何处理更复杂的逻辑。
首先,认识到您的两种形式不相等。
if (a == b) c = true;
c
如果a
等于b
,则将其设置为true;如果不等于,则其值将保持不变。
c = (a == b);
c
如果a
等于b
,则将设置为true;否则,将设置为false。
如果要以第二种形式的等效形式,以第一种形式的样式,则需要这样写:
if (a == b) {
c = true;
} else c = false;
现在很明显,如果更改了某些内容,则两者中的哪一个更易读,更易于维护并且不太可能引入错误。坚持第二种形式。
我不同意您的第一种形式更具可读性-在一行中同时包含两个语句当然不是惯用的C#,并且不建议您if
不使用花括号就使用一个语句。
其次,我看不到第二种形式的可维护性如何-没有什么可维护的。这是关于a
和之间关系的简单说明,b
不能再简单地表达出来了。
选择第二种格式的另一个原因是,您可以c
在一个语句中声明并分配它,即
bool c = (a == b);
修改变量很容易导致错误,因此我避免了。使用if
语句要求先在条件之前声明变量,然后再进行修改。
Another reason to prefer the second form is that you can declare c and assign it in a single statement
” +1
“更易于维护”可能是非常主观的。
我通常更喜欢可读性和意图,而不是减少代码。我认为您可以使用简化形式保存8个键入的字符。
在我看来,将语言和文化围绕语言是“可读性”的特征。
有时可能会导致性能下降,从而减少代码以优化最终的字节码,但是在进行某些性能分析后,应谨慎进行。
不赞成投票的人,请详细说明我修改后的答案出了什么问题。
是的,c = (a == b);
可能很难阅读(更糟糕的是,StyleCop抱怨不必要的括号),但是我仍然喜欢的简单性a == b
。因此,当a
和b
相同时,这是我喜欢使用的内容:
private static bool NoPeriod
{
get
{
return this.MyWaveLength == this.HerWaveLength;
}
}
然后,您可以执行以下操作this.c = this.NoPeriod
:
this.c = this.MyWavelength == this.HerWaveLength;
return this.MyWaveLength = this.HerWaveLength;
还是return this.MyWaveLength == this.HerWaveLength;
相反?
c = (a == b);
不是容易出错的。原始问题的第一种形式是更容易出错,如OP本身必须编辑其问题以修复错误所证明的那样!
else c = false
或||=
第二个要进行分配。