Подтвердить что ты не робот

В Objective-C, что делает запятая, когда используется как разделитель операторов?

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

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

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

[url release], url = nil;

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

Ответ 3

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

Понимание этого оператора открывает всевозможные возможности для jQuery-like.chain-able.commands и более сжатое выражение (Меньше чем-то-аргумент-менее читаемое) МНОГО обычных идиом. Например...

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

LOG ➜ One line inits are: EPIC.