是使用if/then/else来翻转一个布尔值更好,还是用否定?

本文关键字:更好 布尔值 一个 then if else 翻转 | 更新日期: 2023-09-27 17:52:57

我能用一个语句像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而不是单行方式?

是使用if/then/else来翻转一个布尔值更好,还是用否定?

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

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

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

我认为第二个更好,因为它更具可读性和紧凑性(如果/then/else在我看来只是添加了不必要的代码行),这将是唯一的(但很重要的!)选择一个

的原因。

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

然而,

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

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

请,请,请将代码写成否定;这是对意图最简洁明了的表达。如果你用第一种方式写代码,每个读你代码的人都会浪费时间想知道为什么你不写简单的否定。

大多数代码被你和其他人阅读的次数比它被写出来的次数要多得多。从定义上讲,编写易于阅读的代码就是好的代码。