2011-12-21 2 views
0

Можно создать дубликат:
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 expressions this way?
What is the meaning of NULL != value in C++?Почему если (постоянная переменная ==) является предпочтительным, если вместо (переменной == константа)

Для пример,

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

предпочтительнее

if (k == 5) 
{ 
} 

она считается только для форматирования цели и есть ли причина?

+1

[Как проверить на равных? (0 == i) или (i == 0)] (http://stackoverflow.com/questions/148298/how-to-check-for-equals-0-i-or-i-0), [Что есть разница между if (CONST == variable) или if (variable == CONST)?] (http://stackoverflow.com/questions/1626573/), [Почему часто можно увидеть «null! = variable» вместо «Variable! = Null» в C#?] (Http://stackoverflow.com/questions/271561/), [== Оператор и операнды] (http://stackoverflow.com/questions/677264/) [Почему некоторые опытные программисты пишут выражения таким образом?] (http://stackoverflow.com/questions/3309089/) –

+5

Дубликат. Это скоро будет закрыто. Мой совет: не беспокойтесь. Пусть предупреждения компилятора выполняют свою работу и обращают на них внимание. –

+1

Это потому, что некоторые люди используют глупые компиляторы, которые не предупреждают, когда вы случайно записываете 'if (variable = constant)'. Либо это, либо они достаточно глупы, чтобы не включать предупреждения в свои компиляторы. –

ответ

12

Поскольку эта форма затрудняет введение ошибки, забыв об одном знаке равенства. Представьте себе, если вы это сделали:

if (k = 5) 

Это было предназначено для сравнения, но теперь это задание! Что еще хуже, это legal, и это испортит вашу программу несколькими способами (значение k изменено, и условное значение всегда равно true).

Contrast это с

if (5 = k) 

Это не является законным (вы не можете присвоить литерал), так что компилятор будет немедленно сигнализируют это как ошибку.

Таким образом, этот стиль написания кода (присвоения в условных выражениях) не так распространен сегодня, как он когда-то был. Большинство современных компиляторов укажут это как предупреждение, так что вряд ли он останется незамеченным. Лично мне не нравится вторая форма, и поскольку компилятор там помогает, я не использую его.

+4

... если вы не возражаете против своих предупреждений компилятора. – pmg

3

Это, чтобы избежать ошибок,

if(k = 5) { 

} 

, который будет всегда равно истинный.

6

Если вы ошиблись при вводе и писать

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

, то вы, вероятно, только что представила трудно найти ошибку. (На самом деле, это было трудно найти. В настоящее время, большинство компиляторов будет флаг это как предупреждение.)

Это, однако, приведет к ошибке времени компиляции

if (5 = k) 

Кстати, этот стиль называется Yoda. Условия :-)

+2

+1 для условий Йоды - забыли об этом. –

+2

Ошибка, которую не сложно найти, если вы включили предупреждения компилятора. –

+0

Некоторые люди просто игнорируют предупреждения. К сожалению, многие из моих бывших коллег. –

0

Это потому, что обычная опечатка печатает = вместо ==.

1

A. Кто сказал, что это предпочтительнее?!

единственная причина, я могу думать об этом, чтобы избежать:

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

} 

как это вы получите ошибку компиляции, в то время как другой способ будет работать. но я думаю, что это менее читаемо и менее предпочтительно.

1

Прежде всего, большинство людей предпочитает вторую форму, поскольку она чувствует себя «более естественной»; первая форма ощущается как «обратная», и на самом деле ее часто называют «йода условной».

Обоснование использования первой формы заключается в том, чтобы избежать случайного присвоения при вводе = вместо == по ошибке. Так как в условном вы можете написать любое выражение, = допускается, поэтому в случае опечаток инструкции

if(k = 5) 
{ 

} 

не будет проверять, если k равно 5, но присвоит 5 к k и, поскольку = возвращается ссылка на его левый оператор, условие будет оцениваться как истинное, и тело if всегда будет выполнено.

С другой стороны, если вы набрали = вместо == в Йоде условным вы получите

if(5 = k) 
{ 

} 

, что приводит к ошибке компиляции, так как вы не можете присвоить ничего буквальным (5) ,

Хотя они выглядят как хорошая идея, «условные обозначения Yoda» выглядят довольно странно, и, что самое важное, почти любой хороший компилятор с включенными предупреждениями всегда будет предупреждать вас, если вы напишете назначение внутри условного выражения, поэтому большинство люди просто используют «естественный вид».

Смежные вопросы