标称案例首先与正布尔表达式相对

时间:2009-12-16 03:37:12

标签: c++ c boolean

正如主题所述,有时这些问题会发生冲突。例如......

在这种情况下,名义上的情况是第一个,但表达式是负数。

if ( !foo.IsDead() ) {
  DoThis();
} else {
  DoThat();
}

在这种情况下,表达式为正,但名义上的情况是最后的。

if ( foo.IsDead() ) {
  DoThat();
} else {
  DoThis();
}

当然,第三种选择是将IsDead函数翻转为IsAlive()。当他们在编码中遇到这些选择时,我想听听别人对这三种选择的看法。你是通过翻转布尔本身去标称,正面还是修复整个事物。

5 个答案:

答案 0 :(得分:3)

我更喜欢选项二,因为它更清晰/更容易阅读。

但是我怀疑你正在前往宗教战争领域。

在翻转函数名称方面,我只会在isAlive()最有可能的结果时更改。也就是说,如果最可能的结果是你的布尔表达式等于true,我认为代码更清晰。最不可能的(假)应该排在第二位。它是50/50然后我不担心。

答案 1 :(得分:1)

您要检查更多内容 - alivedead。如果比例显着倾向于其中一个,则应相应地命名谓词方法。

至于首先放置名义或正面案件,我会选择名义上的。要弄清楚!dead是活着还是反之亦然并不难,但总是先看到主要的执行流程和以后的特殊情况总是很好。

答案 2 :(得分:1)

在安排if语句时,如果我完全知道的话,我会把它们按频率顺序排列。这肯定会提高性能。

在处理检查错误然后相应进展的代码时,我总是将错误处理代码放在最后一个if语句中。这有助于提高代码的可读性。

关于你的第三个选项,我只确保方法名称本身不是负面的,例如isNotAlive(),否则我认为它很好。

您可能需要阅读Code Complete的第15.1节(如果声明)。本节讨论几乎类似的问题。

答案 3 :(得分:0)

我认为这取决于互动的频率。总的来说,我被告知你应该总是把最常见或最可能的案例作为if案例的真实评价,并将后续的案例放在else块中。我认为这是个人选择的问题。

答案 4 :(得分:0)

我不喜欢这样的东西..

    if ( IsDead() ){}
    else
    {
        //do something.
    }

所以我更喜欢前者。