iPhone SDK: объясните, почему «nil ==» отличается от «== nil» - PullRequest
1 голос
/ 19 июня 2010

Я программирую iPhone SDK около 6 месяцев, но меня немного смущает пара вещей ... одна из которых я спрашиваю здесь:

Почему следующие считаются разными?

if (varOrObject == nil)
{

}

против

if (nil == varOrObject)
{

}

Исходя из Perl, это сбивает меня с толку ...

Может кто-нибудь объяснить, почему одна из двух (вторая) будет истинной, тогда как первая - нет, если две подпрограммы помещаются одна за другой в коде. varOrObject не изменился бы между двумя if операторами.

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

Заранее спасибо.

Ответы [ 5 ]

9 голосов
/ 19 июня 2010

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

if (variable = nil) // assigns nil to variable, not an error.

if (nil = variable) // compile time error

Последний дает вам возможность исправить ошибку во время компиляции.

4 голосов
/ 19 июня 2010

Они могут отличаться, если вы используете Objective-C ++ и переопределяете оператор '==' для объекта.

2 голосов
/ 19 июня 2010

Они точно такие же, это просто разница в стиле.Одно никогда не будет правдой, если другое ложно.

0 голосов
/ 09 февраля 2012

Они могут отличаться только в том случае, если оператор "==" перегружен.Допустим, кто-то переопределяет «==» для списка, так что проверяется содержимое двух списков, а не адрес памяти (например, «equals () в Java). Теперь тот же человек может теоретически определить, что« emptyList == NULL ».

Теперь (emptyList == NULL) будет верным, но (NULL == emptyList) будет по-прежнему ложным.

0 голосов
/ 19 июня 2010

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

...