此问题已在此处有答案:
11年前关闭。
可能重复:
How to check for equals? (0 == i) or (i == 0)
Why does one often see "null != variable" instead of "variable != null" in C#?
Why do some experienced programmers write comparisons with the value before the variable?
What is the meaning of NULL != value in C++?
Should I write (x == 1) or (1 == x) to check if a value is equal to 1?
比如说,
int k =5;
if( 5 == k )
{
}
优于
if (k == 5)
{
}
它是否仅用于格式化目的,或者背后有任何原因?
6条答案
按热度按时间baubqpgj1#
因为这种形式使得通过忘记其中一个等号来引入错误变得更加困难。想象一下,如果你这样做:
这本来是一个比较,但现在它是一个任务!更糟糕的是,它是 * 法律的 *,并且它会以多种方式扰乱您的程序(
k
的值被更改,并且条件总是计算为true
)。对比一下
这是不法律的(不能赋值给文字),因此编译器会立即将其标记为错误。
也就是说,这种编写代码的风格(在条件中赋值)在今天并不像以前那样流行。大多数现代编译器会将此标记为警告,因此不太可能不被检测到。就我个人而言,我不喜欢第二种形式,因为编译器是有帮助的,我不使用它。
ryhaxcpt2#
如果你打错了,
那么你可能只是引入了一个很难找到的bug。(事实上,它很难找到。现在,大多数编译器都会将此标记为警告。)
但是,这将导致编译时错误
顺便说一句,这种风格被称为尤达条件:-)
gv8xihay3#
是为了避免
它总是等于真
niknxzdl4#
谁说它是首选?!
我能想到的唯一原因就是避免
这样你会得到一个编译错误,而另一种方法将工作。但我觉得它可读性不强也不受欢迎
j2cgzkjk5#
首先,大多数人更喜欢第二种形式,因为它感觉“更自然”;第一种形式被认为是“颠倒的”,事实上通常被称为“尤达条件句”。
使用第一种形式的基本原理是为了避免在错误地输入
=
而不是==
时发生意外分配。因为在条件中你可以写任何表达式,所以=
是允许的,所以如果输入错误,不会检查
k
是否等于5
,但会将5
赋给k
,并且由于=
返回对其左手操作符的引用,因此条件将被评估为true,并且if
主体将始终被执行。另一方面,如果你在Yoda条件语句中输入
=
而不是==
,你会得到这会导致编译错误,因为你不能给文字(5)赋值任何东西。
虽然它们看起来像一个好主意,但“Yoda条件”看起来很奇怪,最重要的是,如果你在条件表达式中编写赋值,几乎任何打开警告的好编译器都会警告你,所以大多数人只是使用“自然外观”形式。
wdebmtf26#
这是因为一个常见的错别字是输入
=
而不是==
。