Защо да използвате тази форма на сравнение, ако (nil == s)

Виждам следното да се използва от време на време и въпреки че разбирам значението, изглежда странно формулирано.

ако (нула == s)

Използва се за проверка дали Objective-C променлива е декларирана като нула. За мен би било по-естествено да напиша s == нула, тъй като s е това, което изследваме.

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


person irishetcher    schedule 10.05.2014    source източник
comment
да! Просто прочетете, че това се прави по този начин, за да се улови често срещана грешка на програмист при присвояване на нула на s чрез въвеждане на s = нула.   -  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 отговор (трябва да има представител за преглед)   -  person zaph    schedule 10.05.2014
comment
Също така има същия въпрос на programmers.stackexchange.com. Търсете Йода.   -  person Sulthan    schedule 10.05.2014
comment
@Will Това изобщо не е естествено! if(!s) разчита на принципа, че указателят е цяло число и цялото число се държи като булево (или обратното). C хората разбират, че тъй като е често срещано, не е естествено. Опитайте се да го обясните на начинаещ.   -  person Sulthan    schedule 10.05.2014
comment
Това е като репликата от Once Upon A Time In The West, Как можеш да се довериш на мъж, който носи и колан, и тиранти? Човекът не може да се довери дори на собствените си панталони. Същото нещо тук, да правиш тези глупави глупости, когато не вярваш на собствения си компилатор. Или себе си.   -  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), което ще присвои нула на s, вместо да извърши сравнение. Случайното записване на 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