Вопрос

Я видел это повсюду, но никогда не слышал четкого объяснения почему...Это действительно для любого языка, не только C # или VB.NET или Perl или что-то еще.

При сравнении двух элементов иногда значение "проверить" ставится с левой стороны вместо правой.По моей логике, сначала вы перечисляете свою переменную, а затем значение, с которым вы сравниваете.Но я видел обратное, где "константа" указана первой.

Какой (если таковой имеется) выигрыш есть в этом методе?

Так что вместо:

if (myValue > 0)

Я видел:

if (0 < myValue)

или

if (Object.GimmeAnotherObject() != null)

заменяется на:

if (null != Object.GimmeAnotherObject())

Есть какие-нибудь идеи по этому поводу?

ТИА!Кевин

Это было полезно?

Решение

Некоторые разработчики помещают константу слева вот так

if(0 = myValue)

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

if(0 == myValue)

Это предотвращает множество болезненных отладок в будущем, поскольку ввод

if(myValue = 0)

это совершенно законно, но, скорее всего, вы имели в виду

if(myValue == 0)

Первый выбор - это не то, чего вы хотите.Это незаметно изменит вашу программу и вызовет всевозможные головные боли.Надеюсь, это прояснит ситуацию!

Другие советы

Я не думаю, что простое правило типа "но константа первая" или "но константа последняя" - не очень разумный выбор.Я считаю, что проверка должна выражать ее семантику.Например, я предпочитаю использовать обе версии при проверке диапазона.

if ((low <= value) && (value <= high))
{
    DoStuff(value);
}

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

if (object != null)
{
    DoStuff(object);
}

В C ++ оба они допустимы и компилируются

if(x == 1)

и

if(x=1)

но если вы напишете это вот так

if(1==x)

и

if(1=x)

затем присваивается значение 1, и код не компилируется.

Считается "более безопасным" поместить переменную const с левой стороны.

Как только у вас войдет в привычку помещать переменную const слева для присваивания, она, как правило, становится вашим режимом работы по умолчанию, вот почему вы видите, что она также отображается при проверке равенства

Для .Net это не имеет значения, поскольку компилятор не позволит вам выполнить присваивание в таком условии, как:

if(x=1)

потому что (как говорили все остальные) это плохая практика (потому что ее легко пропустить).

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

Это практика кодирования, позволяющая отлавливать опечатки типа '!=', набранные как '=', например.

Если у вас есть КОНСТАНТА слева, все операторы присваивания будут перехвачены компилятором, поскольку вы не можете присвоить константе.

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

if (var1 = (var2 & var3)) { /* do something */ }

Этот код получит логический результат в var1 а также /* сделай что-нибудь */, если результат верен.

Связанная с этим практика кодирования заключается в том, чтобы избегать написания кода, в котором условные выражения содержат назначения внутри них;хотя язык программирования допускает такие вещи.Вы не часто сталкиваетесь с таким кодом, поскольку присваивания в условных обозначениях необычны, поэтому в типичном коде таких вещей нет.

Есть хороший C статья о практике языкового кодирования на IBM developerWorks ( IBM developerWorks ) сайт, который, вероятно, все еще актуален для людей, пишущих на этом языке.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top