为什么首选 if( 常量 == 变量 ) 而不是 if ( 变量 == 常量 )

Why if( constant == variable ) is preferred instead of if ( variable == constant )

本文关键字:变量 常量 if 为什么      更新时间:2023-10-16

可能的重复项:
如何检查相等?(0 == i( 或 (i == 0(
为什么在 C# 中经常看到"null != 变量"而不是"变量 != null"?
为什么一些有经验的程序员会这样写表达式?
NULL != C++中的值是什么意思?

例如

 int k =5;
 if( 5 == k )
 {
 } 

优先于

if (k == 5)
 {
 }

它是否仅用于格式化目的或背后有任何原因?

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

if (k = 5)

这本来是作为比较,但现在是一项作业!更糟糕的是,它是合法的,它会以多种方式搞砸你的程序(k的值被改变,条件总是计算为 true (。

与此形成对比

if (5 = k)

这是不合法的(您不能分配给文本(,因此编译器会立即将其标记为错误。

也就是说,这种编写代码(条件中的赋值(的风格在今天并不像以前那样普遍。大多数现代编译器会将其标记为警告,因此不太可能未被发现。就个人而言,我不喜欢第二种形式,并且由于编译器可以提供帮助,因此我不使用它。

如果你打错了字并写错了

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

那么你可能只是引入了一个难以找到的错误。(实际上,它曾经很难找到。如今,大多数编译器会将其标记为警告。

但是,这将导致编译时错误

if (5 = k)

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

这是为了避免错误

if( k = 5 ) {
}

这总是等于真实。

A.谁说这是首选?!

我能想到的唯一原因是避免:

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

像这样,你会得到一个编译错误,而另一种方式将起作用。 但我认为它的可读性较低,也不太受欢迎。

首先,大多数人更喜欢第二种形式,因为它感觉"更自然";第一种形式感觉是"颠倒的",实际上通常被称为"尤达条件"。

使用第一种形式背后的基本原理是避免在键入=时意外分配,而不是错误地==。由于在条件中您可以编写任何表达式,因此允许=,因此在错误键入指令的情况下

if(k = 5)
{
}

不会检查 k 是否等于 5 ,但会将5分配给k,并且由于 = 返回对其左侧运算符的引用,因此条件将被评估为 true,并且if主体将始终被执行。

另一方面,如果您在尤达条件中键入=而不是==,您将获得

if(5 = k)
{
}

这会导致编译错误,因为您无法为文字 (5( 分配任何内容。

虽然它们看起来像个好主意,但"Yoda 条件"看起来很奇怪,最重要的是,如果你在条件表达式中编写赋值,几乎任何打开警告的优秀编译器都会警告你,所以大多数人只是使用"自然外观"形式。

这是因为一个常见的拼写错误是输入=而不是==