Зачем использовать эту форму сравнения, если (nil == s)

Я вижу, как иногда используется следующее, и хотя я понимаю его значение, оно выглядит странно сформулированным.

если (ноль == с)

Он используется для проверки того, была ли переменная Objective-C объявлена ​​равной nil. Для меня было бы более естественно написать s == nill, поскольку s — это то, что мы исследуем.

Просто любопытство.


person irishetcher    schedule 10.05.2014    source источник
comment
Да! Просто прочитайте, что это делается для того, чтобы отловить распространенную ошибку программиста, когда он присваивает nil s, набрав s = nil.   -  person irishetcher    schedule 10.05.2014
comment
не самый естественный способ if(!s) ?   -  person Fermat's Little Student    schedule 10.05.2014
comment
Иногда вы будете слышать, что это называется состоянием Йоды по очевидным причинам. Другие могут не согласиться, но я думаю, что они ухудшают читабельность. Они работают только тогда, когда один из операндов является литералом, и если вы не забудете записать их в обратном порядке, вы можете просто не забыть написать == вместо =. Любой хороший современный компилятор предупредит вас об этом типе конструкции, сделав это плохое лекарство довольно бесполезным.   -  person Crowman    schedule 10.05.2014
comment
Потому что это все равно, что сказать, голубое ли небо или высокий ли мужчина. SO Answer (для просмотра должен быть представитель)   -  person zaph    schedule 10.05.2014
comment
Такой же вопрос есть и на Programers.stackexchange.com. Найдите Йоду.   -  person Sulthan    schedule 10.05.2014
comment
@Will Это совсем не естественно! if(!s) основан на том принципе, что указатель является целым числом, а целое число ведет себя как логическое значение (или наоборот). C люди понимают, что это неестественно, потому что это обычное дело. Попробуйте объяснить это новичку.   -  person Sulthan    schedule 10.05.2014
comment
Это как строчка из «Однажды на Диком Западе»: «Как можно доверять человеку, который носит и ремень, и подтяжки?» Мужчина не может доверять даже своим штанам. То же самое здесь, делая эту глупую чепуху, когда вы не доверяете своему собственному компилятору. Или себя.   -  person Extra Savoir-Faire    schedule 10.05.2014
comment
@Sulthan Я бы сказал, что использование if (!s) более естественно. Прочтите на английском - если не s. Простой. Это означает, что если s не установлен. По моему понятно любому.   -  person rmaddy    schedule 10.05.2014
comment
Проблема с if (!s) заключается в том, что s не является логическим значением. Лучше: if (s == nil), так как s — это объект.   -  person zaph    schedule 10.05.2014


Ответы (1)


Это используется, чтобы затруднить случайное написание if (s = nil), которое присвоит nil вместо выполнения сравнения. Случайная запись if (nil = s) не будет компилироваться.

person Sebastian Kirsche    schedule 10.05.2014
comment
В общем случае теперь это вызовет предупреждение или ошибку компилятора. Лучше всего сделать код понятным для человека. Это будет написано один раз и прочитано много раз. - person zaph; 10.05.2014
comment
Есть и другие причины — например, в Java "text".equals(stringVar) работает иначе, чем stringVar.equals("text"), если stringVar равно null. Обычно они только делают код менее читабельным, потому что ошибки, которые они пытаются предотвратить, очень легко найти и исправить. Однако они по-прежнему широко используются в некоторых языках (например, в PHP). - person Sulthan; 10.05.2014
comment
Спасибо всем за отзывы. Очень информативно. - person irishetcher; 12.05.2014