Прежде всего, большинство людей предпочитает вторую форму, поскольку она чувствует себя «более естественной»; первая форма ощущается как «обратная», и на самом деле ее часто называют «йода условной».
Обоснование использования первой формы заключается в том, чтобы избежать случайного присвоения при вводе =
вместо ==
по ошибке. Так как в условном вы можете написать любое выражение, =
допускается, поэтому в случае опечаток инструкции
if(k = 5)
{
}
не будет проверять, если k
равно 5
, но присвоит 5
к k
и, поскольку =
возвращается ссылка на его левый оператор, условие будет оцениваться как истинное, и тело if
всегда будет выполнено.
С другой стороны, если вы набрали =
вместо ==
в Йоде условным вы получите
if(5 = k)
{
}
, что приводит к ошибке компиляции, так как вы не можете присвоить ничего буквальным (5) ,
Хотя они выглядят как хорошая идея, «условные обозначения Yoda» выглядят довольно странно, и, что самое важное, почти любой хороший компилятор с включенными предупреждениями всегда будет предупреждать вас, если вы напишете назначение внутри условного выражения, поэтому большинство люди просто используют «естественный вид».
[Как проверить на равных? (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/) –
Дубликат. Это скоро будет закрыто. Мой совет: не беспокойтесь. Пусть предупреждения компилятора выполняют свою работу и обращают на них внимание. –
Это потому, что некоторые люди используют глупые компиляторы, которые не предупреждают, когда вы случайно записываете 'if (variable = constant)'. Либо это, либо они достаточно глупы, чтобы не включать предупреждения в свои компиляторы. –