为什么使用if(constant == variable)而不是if(variable == constant)[重复]

svmlkihl  于 12个月前  发布在  其他
关注(0)|答案(6)|浏览(100)
baubqpgj

baubqpgj1#

因为这种形式使得通过忘记其中一个等号来引入错误变得更加困难。想象一下,如果你这样做:

if (k = 5)

这本来是一个比较,但现在它是一个任务!更糟糕的是,它是 * 法律的 *,并且它会以多种方式扰乱您的程序(k的值被更改,并且条件总是计算为true)。
对比一下

if (5 = k)

这是不法律的(不能赋值给文字),因此编译器会立即将其标记为错误。
也就是说,这种编写代码的风格(在条件中赋值)在今天并不像以前那样流行。大多数现代编译器会将此标记为警告,因此不太可能不被检测到。就我个人而言,我不喜欢第二种形式,因为编译器是有帮助的,我不使用它。

ryhaxcpt

ryhaxcpt2#

如果你打错了,

if (k = 5) // instead of ==

那么你可能只是引入了一个很难找到的bug。(事实上,它很难找到。现在,大多数编译器都会将此标记为警告。)
但是,这将导致编译时错误

if (5 = k)

顺便说一句,这种风格被称为尤达条件:-)

gv8xihay

gv8xihay3#

是为了避免

if( k = 5 ) {

}

它总是等于真

niknxzdl

niknxzdl4#

谁说它是首选?!
我能想到的唯一原因就是避免

int k =5;
 if( 5 = k )//notice one "="
 {

 }

这样你会得到一个编译错误,而另一种方法将工作。但我觉得它可读性不强也不受欢迎

j2cgzkjk

j2cgzkjk5#

首先,大多数人更喜欢第二种形式,因为它感觉“更自然”;第一种形式被认为是“颠倒的”,事实上通常被称为“尤达条件句”。
使用第一种形式的基本原理是为了避免在错误地输入=而不是==时发生意外分配。因为在条件中你可以写任何表达式,所以=是允许的,所以如果输入错误,

if(k = 5)
{

}

不会检查k是否等于5,但会将5赋给k,并且由于=返回对其左手操作符的引用,因此条件将被评估为true,并且if主体将始终被执行。
另一方面,如果你在Yoda条件语句中输入=而不是==,你会得到

if(5 = k)
{

}

这会导致编译错误,因为你不能给文字(5)赋值任何东西。
虽然它们看起来像一个好主意,但“Yoda条件”看起来很奇怪,最重要的是,如果你在条件表达式中编写赋值,几乎任何打开警告的好编译器都会警告你,所以大多数人只是使用“自然外观”形式。

wdebmtf2

wdebmtf26#

这是因为一个常见的错别字是输入=而不是==

相关问题