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

我应该测试是否等于1或不等于0吗?

  •  10
  • Emil  · 技术社区  · 15 年前

    前几天我在这里编写代码,写了几个if语句,其中的整数总是 0 1 (实际上充当 bool

    检测阳性结果时,哪一个更好;测试 int == 1 int != 0 ?

    例如,给定一个int n ,如果我想测试 true ,我应该用吗 n == 1 n != 0

    在速度、处理能力等方面有什么不同吗?

    1 / ,这是不相关的,不会发生。

    17 回复  |  直到 12 年前
        1
  •  47
  •   Mirek Pluta    15 年前

        2
  •  35
  •   Reed Copsey    15 年前

    这要看情况了。如果您使用的语言支持布尔值,则应使用布尔值,而不是整数,即:

    if (value == false)
    

    if (value == true)
    

    if (!value)
    

    if (value)
    

    在大多数现代语言中,很少有理由使用整数进行布尔运算。

    false 是0,并且 true 不是0。在这种情况下,使用 if (i == 0) if (i != 0) 用于真实检查。

    如果保证0和1是仅有的两个值,我可能会使用 if (i == 1)

        3
  •  10
  •   JAB    15 年前

    if (bool) if (!bool) .

        4
  •  9
  •   Julien Lebosquain    15 年前

    if (int != 0) 因为它和 if (int) int == 1

        5
  •  7
  •   James Morris    15 年前

    else 语句可以使选择显得随意。我会选择最有意义的,或者更具上下文意义的,默认的或“自然”的行为,比如说预期的发生频率。

    这两者之间的选择 int == 0 int != 1

        6
  •  6
  •   Paul Rubel    15 年前

    两点:

    2) 你可能想做 (1==整数)

        7
  •  3
  •   geshafer    15 年前

    if (int)
    

    也就是说

    if (int != 0)
    

    if (int == 1)
    

    因为如果不是0,答案就可能不是1,即使你说不用担心。

        8
  •  2
  •   Justin Niessner    15 年前

    如果只有两个值是可能的,那么我将使用第一个值:

    if(int == 1)
    

    因为它更明确。如果没有对价值观的约束,我会不这么想。

        9
  •  2
  •   FastAl    15 年前
    IF INT IS 1
    NEXT SENTENCE
    ELSE MOVE "INT IS NOT ONE" TO MESSAGE.
    
        10
  •  2
  •   me_and    15 年前

    == 通常比使用更容易阅读 != .

    也就是说,大多数处理器都有一个特定的比较零操作。它取决于特定的编译器、处理器等,但使用它可能带来几乎无法估量的小速度好处 != 0 结束 == 1 因此。

    if (int) if (!int) ,不过,这既更具可读性,又能让你获得微乎其微的速度奖励。

        11
  •  2
  •   Tom Hawtin - tackline    15 年前

    我有妄想症。如果值为 0 1 那可能是 2 . 可能不是今天,也可能不是明天,但是一些维护程序员会在子类中做一些奇怪的事情。有时候我自己也会犯错 [嘘,别告诉我老板] . 所以,让代码告诉我 0 1 否则它会向妈妈哭诉。

    if (i == 0) {
        ... 0 stuff ...
    } else if (i == 1) {
        ... 1 stuff ...
    } else {
        throw new Error();
    }
    

    switch -我发现它在花括号语言中的语法太重了。)

        12
  •  1
  •   Kevin Kibler    15 年前

    当使用整数作为布尔值时,我更喜欢将它们解释为:false=0,true=non-zero。

    我会把条件语句写成 .

        13
  •  1
  •   stacker    15 年前

    我会说,这取决于语义,如果你条件的意思

    while ( ! abort )

    if ( quit ) break;

        14
  •  1
  •   Toby    15 年前
    if( is_numeric( $int ) ) { its a number }
    elseif( !$int ) { $int is not set or false }
    else { its set but its not a number }
    

    讨论结束:P

        15
  •  1
  •   Enmanuel Rivera    15 年前

    我同意大多数人在这篇文章中所说的话。如果有两种不同的可能性,那么使用布尔值要有效得多。它还使代码更易于阅读和解释。

        16
  •  1
  •   ohho    15 年前

    我来自c世界。一开始我对objective-c不太了解。过了一段时间,我更喜欢这样:

    if (int == YES)
    

    if (int == NO)
    

    在c中,即:

    if (int == true)
    if (int == false)
    

    这些天,我用 varchar 而不是 integer

     name   marital_status
    ------  --------------
     john      single
     joe       married
    

    这比:

     name   marital_status
    ------  --------------
     john         S
     joe          M
    

     name   marital_status
    ------  --------------
     john         1
     joe          2
    
        17
  •  0
  •   Stuart    15 年前