objective c - texto - En Objective-C, ¿qué hace una coma cuando se utiliza como separador de una declaración?
texto para poner puntos y comas (3)
Estoy buscando un código fuente de un tercero y veo repetidamente una sintaxis que es nueva para mí. Básicamente están separando declaraciones con comas en lugar de puntos y comas. Se compila y funciona, pero no entiendo lo que está haciendo. Se ve asi
if(url)[url release], url = nil;
y también lo usan sin el si a veces
[url release], url = nil;
¿Que está pasando aqui?
Al igual que en C y C ++, el operador de coma calcula la cosa en su lado izquierdo y luego la calcula a la derecha; El valor global de la expresión es el valor del lado derecho. Básicamente, esto permite que una sola expresión haga dos cosas (la del lado izquierdo es presumiblemente para efectos secundarios como una llamada de método o una asignación). Sí, la sintaxis es algo ambigua con la utilizada en las llamadas a funciones y declaraciones de variables.
Prefiero usar un bloque honesto que contenga múltiples declaraciones cuando sea posible. Más largo, pero en definitiva más limpio. Más fácil de depurar también.
Esta es una de mis "características" favoritas de C, ObjC, etc.
La comprensión de este operador desbloquea todo tipo de posibilidades para los jQuery-like.chain-able.commands , y una expresión más concisa ( de la que algunos podrían argumentar que es menos legible ) de MUCHOS modismos comunes. Por ejemplo ...
-(id)init {
return self != super.init ? nil : [self setProperty:@"EPIC"],
NSLog(@"One line inits are: %@.", _property), self; }
REGISTRO ➜
One line inits are: EPIC.
Estas son expresiones separadas por comas y se evalúan de izquierda a derecha, con el resultado de que la expresión completa es la última expresión evaluada.