我该如何订购if语句?

时间:2013-07-12 01:09:01

标签: java c++ c

[我以为这本来会被问到,但我找不到答案]。

在撰写if声明时,我应该将进行比较的第一个还是第二个? (我对C / C++Java都特别好奇。

这很重要,还是只是风格? (约定似乎是#34;变量第一,价值第二")。

请考虑以下代码:

#include <iostream>

int main() {
    int x = 5;

    if ( 5 == x ) {
        std::cout << "X == 5, true." << std::endl;
    }
    if ( x == 5 ) {
        std::cout << "5 == X, true." << std::endl;
    }

    return 0;
}

输出:

  

X == 5,是的   5 == X,是的。

因此 我错过了哪些细微之处?

5 个答案:

答案 0 :(得分:10)

这些被称为Yoda Conditions,据我所知,主要思想是防止意外分配(即你不能分配文字)。

是的,值得一提的是像if (a = 5)这样的a不是bool的东西在Java等语言中是不允许的(尽管在C / C ++中很好),但作为维基百科文章指出仍有可能防止不必要的行为:

它还可以解决某些类型的不安全的null行为。

String myString = null;
if (myString.equals("foobar")) { /* ... */ }
// This causes a NullPointerException in Java

Yoda条件:

String myString = null;
if ("foobar".equals(myString)) { /* ... */ }
// This is false, as expected

答案 1 :(得分:5)

将常量放在第一位(又名“Yoda风格”)可以防止出现简单错误的问题:

if (x = 5) // if (x == 5) was intended

...仍然编译但做错了(虽然大多数当前的编译器会警告这个问题)。

if (5 = x) // if (5 == x) was intended

...绝对无法编译甚至接近正常运行的编译器。

答案 2 :(得分:2)

不,没有区别。没关系。做你喜欢的事。就我个人而言:

x == 5

因为它读得更好(或者我认为)。 5 == x听起来不对劲。但同样,个人意见。

我认为您会发现大多数人都会x == 5,因为您要比较x,而不是比较5

答案 3 :(得分:1)

两者都可以。 但是当参数在左侧时更容易接受。 例如:

if ( x == 5 )

反正。没关系,做任何你喜欢的事情,感觉更舒服。

答案 4 :(得分:-4)

在大多数情况下,您会发现通常的做法是先将变量放在第一位,因为运算符 == 表示赋值,在这里您要赋值 5 所以将变量放在第一位才有意义。

你的if语句应如下所示:

    if ( 5 == x ) {
        std::cout << "X == 5, true." << std::endl;
    }