Objective C — iPhone: использование нуля в сравнении

Я вижу, что какой-то код в Nimbus выглядит так:

if (nil == someObject)

но я обычно печатаю:

if (someObject == nil)

Есть ли различия в этих утверждениях?


person Tuyen Nguyen GB    schedule 16.08.2012    source источник
comment
Почему бы просто не проверить это на себе? if (nil == someObject && someObject == nil) NSLog(@"woohoo!");   -  person esqew    schedule 16.08.2012


Ответы (5)


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

Название игры здесь защищает от дурака. Смотрите, проблема в том, что это:

if (someObject = nil) // SETS someObject to nil

полностью действителен, всего в одном символе от == nil, и его очень легко пропустить. Однако, если вы попытаетесь сделать это:

if (nil = someObject)

ваш компилятор взбесится, предотвращая проблему.

Лично я ненавижу условности Йоды, так как считаю, что их трудно читать. Это означает, что нужно быть очень осторожным с моим кодом, но эй, мне от этого лучше, верно? Здесь все сводится к стилю, так что выбирайте то, что вам удобнее.

О, и если вы используете Xcode, это почти спорный вопрос. Если вы проверите этот вопрос, вы увидите, что Xcode теперь предупреждает вас, если вы пытаетесь выполнить задание в if без лишних скобок. Это,

if (someObject = nil) // throws a warning, whereas
if ((someObject = nil)) // does not

что делает проблему гораздо труднее пропустить.

person Patrick Perini    schedule 16.08.2012

No.

(Дополнительное бла-бла-бла для SO минимальных правил публикации. Разве они не были полезны?)

person Community    schedule 16.08.2012

Они функционально одинаковы, это просто проблема стиля кодирования.

Раньше ваш компилятор не предупреждал вас, если вы пропустили знак равенства.

if (someObject = nil) 

Вероятно, не делает то, что вы хотите. Но если их инвертировать:

if (nil = someObject)  

тогда компилятор будет жаловаться.

В наши дни это, вероятно, не имеет никакого значения.

person Stephen Darlington    schedule 16.08.2012
comment
Я помню, как несколько лет назад выполнял присваивание в операторе if. Мне потребовалось ТРИ ДНЯ, чтобы отследить мою ошибку. - person Dustin; 16.08.2012

Нет, но код ниже более удобочитаем.

Слева: выражение «допрашиваемый», значение которого постоянно меняется.

Правая часть: сравниваемое выражение, значение которого более постоянно.

person bitmapdata.com    schedule 16.08.2012

Единственная разница в настоящее время состоит в том, что вторая форма более читабельна (или, может быть, она субъективна, и только я предпочитаю ее).

person Community    schedule 16.08.2012