В Objective-C, что делает запятая при использовании в качестве разделителя операторов? - PullRequest
19 голосов
/ 06 апреля 2010

Я просматриваю некоторый исходный код от третьей стороны и постоянно вижу новый для меня синтаксис. В основном они разделяют операторы запятыми вместо точек с запятой. Он компилируется и работает, но я не понимаю, что он делает. Похоже, что так

if(url)[url release], url = nil;

и они также используют его без if иногда

[url release], url = nil;

Что здесь происходит?

Ответы [ 3 ]

16 голосов
/ 06 апреля 2010

Как и в C и C ++, оператор запятой вычисляет вещь с левой стороны, а затем вычисляет вещь справа; общее значение выражения является значением правой стороны. По сути, это позволяет одному выражению делать две вещи (одна на левой стороне, вероятно, для побочных эффектов, таких как вызов метода или назначение). Да, синтаксис несколько неоднозначен с синтаксисом, используемым в вызовах функций и объявлениях переменных.

Я предпочитаю использовать честный блок, содержащий несколько операторов, где это возможно. Дольше, но в конечном итоге чище. Отладка тоже проще.

3 голосов
/ 06 апреля 2010

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

2 голосов
/ 28 мая 2013

Это одна из моих любимых "функций" C, ObjC и т. Д. *

Понимание этого оператора открывает всевозможные возможности для jQuery-like.chain-able.commands и более лаконично ( thoug-some-бы-argue-менее-читабельный ) выражение многих распространенных идиом .. например ...

-(id)init { 
     return self != super.init ? nil : [self setProperty:@"EPIC"], 
     NSLog(@"One line inits are: %@.", _property), self;        }

LOG ➜ One line inits are: EPIC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...