代码之家  ›  专栏  ›  技术社区  ›  CodexArcanum

哪种形式更清晰:if(!值)或if(标志==值)?

  •  54
  • CodexArcanum  · 技术社区  · 14 年前

    我明白这是一个主观的问题,所以如果需要关闭它,我很抱歉,但我觉得它经常出现,让我怀疑是否有一个普遍的偏好,一种形式超过其他。

    显然,最好的答案是“重构代码,这样就不需要测试错误了”,但有时这样做并不容易,“else”分支只是继续处理。因此,当您必须具有“if not false”构造时,这是首选标准:

    if (!value)
    

    或者测试是假的

    if (value == false)
    
    18 回复  |  直到 6 年前
        1
  •  73
  •   AustinWBryan ravenspoint    6 年前

    if (!value) 更容易/更快地跟踪。就像你说的那样主观。只要你始终如一,这是最主要的。

    编辑

    另外一点需要补充的是,省略真/假关键字也应该(希望)迫使编码人员使用更好的变量。Bool变量应始终表示意义或状态用途,例如:

    if (MyWallet.IsEmpty)

    == false == true 因为这是多余的。以上内容可立即阅读。

    比必须破译要好得多:

    if (MyWallet.EmptyStatus == true)

        2
  •  29
  •   Charles Bretana    14 年前

    if ((value == false) == true) ...

    因为这是在验证 value is false 实际上是一个布尔真值。。。

    然后,很明显,涵盖这两种可能性会增加更多的清晰度,

    if ((value == false) == true && (value == false) != false)

    <grin/>

    if (((value == false) == true && (value == false) != false) == true)

        3
  •  20
  •   AustinWBryan ravenspoint    6 年前
    if (!value)
    

    在我看来,这一点总是比较清楚的。

    if (value == false)
    

    我不想这么说,因为这听起来有点刻薄,但这通常表明编写代码的人并不真正理解布尔值的用法。不需要重新验证if语句中的布尔值。这是多余的。

    (就我个人而言,如果他们给变量命名,我也会对这个人感到恼火 value 而不是更有意义的东西。我有一种感觉,你发布的只是一个伪代码,我肯定会在评论上说。)

    编辑(回应以下评论):

    它可能看起来微不足道,但往往是一个更大的事情的迹象。说实话,大多数使用var==true的人都不明白。这只是事实。我并不是说他们愚蠢或者他们不应该成为程序员,只是说他们可能需要复习和学习一些东西。问题是,当逻辑变得更复杂时,不理解这样的概念会导致更大的问题。有人说“这是一种风格”,没关系。在这种情况下,真正的问题是,“这样做对我有什么好处?如果你不能确切地回答这个问题,那么你需要问自己“为什么这是个好主意?”

        4
  •  13
  •   Bill the Lizard Alexis MP    14 年前

    我会的 使用 if(value == true) ,所以为了保持一致性,我也不会使用 if(value != false) .

        5
  •  13
  •   Claudio Redi    14 年前

    if(!value) 更清晰,更“优雅”,特别是如果你命名布尔变量正确

    • 不管怎样

    像这样的

    if (Page.IsPostback == true)
    

    对我来说是多余的

        6
  •  11
  •   Robaticus    14 年前

    不同意见(种类)

    从编译的角度来看,您将得到相同的IL,因此它实际上只从可读性的角度考虑。

    从这个角度来看 if(value == false)

    老实说,我使用这两种方法,大多数情况下,我让它取决于我的变量名。如果用“not”代替“bang”听起来还可以,我很可能会使用bang符号

    例如

    if(!gotValue) {}
    //if (I've) not gotValue
    
    //but
    
    if(checkValue == false){}
    //If (I've) not checkValue doesn't quite work here grammatically.
    
        7
  •  6
  •   Rob Windsor    14 年前

    我用 Not value 在VB中编写代码时却倾向于使用 value == false 用C#编码时。我发现感叹号有时会在变量名中丢失(例如!法律)。也许是因为我,呃,经验丰富。

        8
  •  2
  •   David    14 年前

    我喜欢用 if(!value)

    this MSDN article

    if(pane.IsChecked)
    

    但是,如果( pane.IsChecked == true

    我们不用二进制语言编写C代码的原因之一是人类的可读性。如果让您在阅读时能够流畅的代码和不能够流畅的代码之间进行选择,请选择可读性更好的代码。我不认为加上 == true

    诚然,这是一个值得担心的小例子。但正如其他一些答案所表明的,不将这种思维方式应用于更大规模的案例可能会损害可读性。

        9
  •  2
  •   mishoo    14 年前

    我通常更喜欢如果(!值),当我确定该值是布尔值时。但很多时候它可以是一个字符串,也可以是一个数字。

    将评估为 在许多语言的条件句中(虽然不是全部);但是,字符串“0”的计算结果是 是的 是的 在条件句中)。

    咆哮结束。我的建议是:要明确,特别是如果您的语言是非常动态的类型(即JavaScript、PHP、Perl)。

        10
  •  1
  •   IVlad    14 年前

    你喜欢哪一个都行。挑一个坚持下去。

        11
  •  1
  •   Pavel Radzivilovsky    14 年前

    如果有人喜欢,我会加一个额外的等级:

    if( (value==false) == true )
    

    :)

        12
  •  1
  •   Luc    14 年前

    我不认为这是主观的。我有

    if (value) {
      return true;
    } else {
      return false;
    }
    

    奥托,这里给出的所有答案让我的第一句话有点不正确。

        13
  •  1
  •   Quick Joe Smith    14 年前

    if (!value) 至少用于计算变量或公共属性,如 Page.IsPostback

    if (!(SomeType.SomeProperty.CallingAMethod(input).GetSomething.BooleanProperty))
    

    只是想引起更多的注意。

    总之,这是Perl风格的一个论点 unless until 关键词。

        14
  •  0
  •   Corin    14 年前

    !value

    但是,当条件包含多个值检查时,我发现它更容易阅读 value == false

        15
  •  0
  •   Smar user2251284    14 年前

    我其实有很多可能的形式。

    实际上,这并不是按照标准编写的,而是我的看法:

    //if foo is(or exists)
    if(foo)
    
    //if foo is true
    if(foo == true)
    
    //if foo doesn’t exist
    if(!foo)
    
    if foo is false
    if(foo == false)
    

    因此我不认为==false是多余的。

        16
  •  0
  •   Oak    14 年前

    我更喜欢第二种选择 if (value == false) 一个。 我很乐意使用 if (~value) if (not value) 用支持它的语言,但是 ! 只是太容易将waaaaay与变量名或大括号或|或| |运算符合并。。。至少在我看来。

    还有两件事:

    1. if (value == true) ,我意识到我前后矛盾。尽管在我看来,一致性非常重要,但这令人讨厌 更糟的是。
        17
  •  0
  •   Olumide    6 年前

    不管什么情况 if true .

    因此,当 value false if (!value) 要执行的块是因为 ! 操作员基本上翻转 价值 是的 是的 一个 如果 块需要执行。

    if (value) 如果(!值) if (flag == value) if (value == true) if (value == false) 价值 将给出语法错误,并且 if (value.Value == true) 价值 如果

        18
  •  0
  •   d219    4 年前

    我也认为 == if

    if ( ! created)
    

    甚至使用 OpenDyslexic ! 靠近开口支架 ( 可能太近了,一眼就分辨不出来 if(!created) .

        19
  •  -2
  •   user1312568    7 年前

    我使用if(value==false) 这个!如果(!价值)是如此之小,我有时想念它。

    推荐文章