正如主题所述,有时这些问题会发生冲突。例如......
在这种情况下,名义上的情况是第一个,但表达式是负数。
if ( !foo.IsDead() ) {
DoThis();
} else {
DoThat();
}
在这种情况下,表达式为正,但名义上的情况是最后的。
if ( foo.IsDead() ) {
DoThat();
} else {
DoThis();
}
当然,第三种选择是将IsDead函数翻转为IsAlive()。当他们在编码中遇到这些选择时,我想听听别人对这三种选择的看法。你是通过翻转布尔本身去标称,正面还是修复整个事物。
答案 0 :(得分:3)
我更喜欢选项二,因为它更清晰/更容易阅读。
但是我怀疑你正在前往宗教战争领域。
在翻转函数名称方面,我只会在isAlive()最有可能的结果时更改。也就是说,如果最可能的结果是你的布尔表达式等于true,我认为代码更清晰。最不可能的(假)应该排在第二位。它是50/50然后我不担心。
答案 1 :(得分:1)
您要检查更多内容 - alive
或dead
。如果比例显着倾向于其中一个,则应相应地命名谓词方法。
至于首先放置名义或正面案件,我会选择名义上的。要弄清楚!dead
是活着还是反之亦然并不难,但总是先看到主要的执行流程和以后的特殊情况总是很好。
答案 2 :(得分:1)
在安排if语句时,如果我完全知道的话,我会把它们按频率顺序排列。这肯定会提高性能。
在处理检查错误然后相应进展的代码时,我总是将错误处理代码放在最后一个if语句中。这有助于提高代码的可读性。
关于你的第三个选项,我只确保方法名称本身不是负面的,例如isNotAlive(),否则我认为它很好。
您可能需要阅读Code Complete的第15.1节(如果声明)。本节讨论几乎类似的问题。
答案 3 :(得分:0)
我认为这取决于互动的频率。总的来说,我被告知你应该总是把最常见或最可能的案例作为if案例的真实评价,并将后续的案例放在else块中。我认为这是个人选择的问题。
答案 4 :(得分:0)
我不喜欢这样的东西..
if ( IsDead() ){}
else
{
//do something.
}
所以我更喜欢前者。