使用if / then / else来翻转布尔值或否定是否更好?

时间:2013-01-14 22:31:36

标签: c# compiler-construction boolean

我可以像使用if / then / else一样有效地使用一个语句切换布尔值吗?

在我的应用程序的另一段代码中找到了这个......

    private void whatever()
    {
        ////
        //// a bunch of stuff
        ////

        if (SomeBooleanValue)
        {
            SomeBooleanValue= false;
        }
        else
        {
            SomeBooleanValue = true;
        }
    }

出于好奇,我试过了......

    private void whatever_whatever()
    {
        //// 
        //// the same stuff
        //// 

        SomeBooleanValue = !SomeBooleanValue;
    }

...并在调试中走过它,出现,我得到了相同的结果。

是否有充分的理由使用if / then / else而不是单行方式?

5 个答案:

答案 0 :(得分:4)

  

是否有充分的理由使用if / then / else而不是单行方式

不是我能想到的。对于大多数程序员来说,使用!运算符更简洁,更直观。

答案 1 :(得分:3)

1行方式非常好,你使用if/ else结构的唯一原因是你除了切换布尔值之外还要做其他事情。

答案 2 :(得分:2)

我会说第二个更好,因为它更具可读性和紧凑性(如果/ then / else IMO只是添加了不必要的代码行),这将是唯一(但强大!)理由更喜欢其中一个

答案 3 :(得分:2)

由于编译器优化,它将与使用!相同!运算符,对于其他程序员来说更容易阅读。

然而,

为了提高性能,CPU将尝试提前预测执行逻辑。对于条件(if / else)语句,它将尝试预测条件的结果,然后加载其余的逻辑。如果选择不正确,它必须返回并重新计算所有内容,从而降低性能。

http://en.wikipedia.org/wiki/Branch_predictor

答案 4 :(得分:1)

拜托,请把代码写成否定;它是意图最简洁,最简洁的表达方式。如果你以第一种方式编写代码,那么代码的每个读者都会浪费时间,想知道为什么你不编写简单的否定。

大多数代码将由您和其他人阅读,比编写代码多得多。编写简化阅读过程的代码几乎就是好的代码。