miércoles, 12 de diciembre de 2012

Objective-C se moderniza: subscripting

Objective-C es un lenguaje bastante distinto en su sintaxis a otros lenguajes de programación como ser C#, Java o Ruby. Como tal, es un lenguaje que a primer golpe de vista parece dificil de entender.

Además, es un lenguaje que por sus características, es más "verbose" que los demás, y esto a su vez puede hacer que parezca que hay que escribir mucho código.

Esta última característica no es siempre mala. Por ejemplo, en Java (o cualquier otro lenguaje que no incluya los nombres de los parámetros en el nombre del método), si uno no conoce la API en detalle, y ve este código:
String result = "some sample string".replace( 'a', 's' );
puede no quedarle claro si se va a remplazar la 'a' por la 's' o la 's' por la 'a'. En Objective-C, esto se escribe así:
NSString *result = [@"some sample string" stringByReplacingOccurrencesOfString:@"a" withString:@"s"];
Es verdad que es mucho más código, pero el mismo se entiende sin necesidad de conocer la API ni de ir a la documentación.

Nota: es un ejemplo "tonto", pero se complica si se tienen funciones con varios parámetros.

Sin embargo, hay casos en que tanto código puede resultar innecesario. Por ejemplo, cuando se quiere acceder a un elemento de un array:
id item = [someArray objectAtIndex:index];
o peor, cuando se quiere almacenar un elemento en un array (mutable):
[someMutableArray insertObject:item atIndex:index];
Por suerte, Objective-C es un lenguaje en evolución, y hay varias cosas que están cambiando. Ya hablamos de Automatic Reference Counting y de Blocks, funcionalidades que se agregaron recientemente al lenguaje/compilador, pero también por ejemplo literales para arrays, diccionarios o números (de lo que hablaré en algún otro momento).

A partir de Xcode 4.4, el acceso a los elementos de un array, tanto para leer como para modificar, se puede hacer de forma más concisa:
id item = someArray[index];
someMutableArray[index] = item;
Esto también aplica para los diccionarios, que se puede acceder por clave por ejemplo con:
id item = someDictionary[key];
someMutableDictionary[key] = item;
Pueden ver más información en la documentación del LLVM al respecto.

No hay comentarios.:

Publicar un comentario