Este tutorial le enseñará cómo programar de manera más eficiente el uso de literales de objetos.!
En programación, un literal es simplemente un valor fijo que un programador ingresa en un archivo de código fuente. Algunos ejemplos de C incluyen:
año int = 2012; char initial = 'M';
En lo anterior, '2012' es un En t
literal y 'M' es un carbonizarse
literal.
Los informáticos también a veces se refieren a expresiones literales. Un expresión es simplemente un grupo de valores y operadores que devuelven un nuevo valor, como "2 * pi * r". Una expresión literal es una expresión que solo contiene valores literales, como "2 * 3.14 * 10".
El siguiente fragmento de código muestra cómo se pueden crear y asignar las variables con expresiones literales Cía:
resultado int = 15/5; // La expresión literal "15/5" produce 3 doble = 5/2; // La expresión literal "5/2" produce 2.5
Debido a que Objective-C es un superconjunto de C, todas las líneas de código demostradas en C hasta ahora también son sintaxis válida de Objective-C. Sin embargo, todos los literales demostrados también han sido para tipos de datos primitivos. Un uso más interesante de los literales es aplicarlos a objetos..
El siguiente es un ejemplo de un objeto literal:
NSString * siteTitle = @ "Mobiletuts +";
En la línea de código anterior., @ "Mobiletuts +"
es un objeto literal que se utiliza para representar un objeto de cadena. Sin el uso de un objeto literal, la línea de código anterior tendría que escribirse de manera muy diferente, tal vez así:
NSString * siteTitle = [NSString stringWithUTF8String: "Mobiletuts"];
Como puede ver, la sintaxis literal del objeto es mucho más concisa y legible.
Con el lanzamiento de Apple LLVM Compiler 4.0, se ha agregado soporte literal de objeto adicional para NSNumber
objetos, objetos Array y objetos Diccionario.
NSNumber
Los objetos ahora se pueden representar con objetos literales..
El siguiente fragmento de código ilustra el estilo tradicional:
NSNumber * boolYES = [NSNumber numberWithBool: YES]; NSNumber * boolNO = [NSNumber numberWithBool: NO]; NSNumber * charX = [NSNumber numberWithChar: 'X']; NSNumber * fortySevenInt = [NSNumber numberWithInt: 47]; NSNumber * fortySevenUnsigned = [NSNumber numberWithUnsignedInt: 47U]; NSNumber * fortySevenLong = [NSNumber numberWithLong: 47L]; NSNumber * goldenRatioFloat = [NSNumber numberWithFloat: 1.61803F]; NSNumber * goldenRatioDouble = [NSNumber numberWithDouble: 1.61803];
Usando literales de objetos, lo anterior se puede reescribir de la siguiente manera:
NSNumber * boolYES = @YES; NSNumber * boolNO = @NO; NSNumber * charX = @ 'X'; NSNumber * fortySevenInt = @ 47; NSNumber * fortySevenUnsigned = @ 47U; NSNumber * fortySevenLong = @ 47L; NSNumber * goldenRatioFloat = @ 1.61803F; NSNumber * goldenRatioDouble = @ 1.61803;
Los literales de colección son una adición increíblemente útil para Objective-C. El nuevo compilador LLVM ofrece la capacidad de crear literales de colección para matrices y diccionarios, pero no conjuntos.
La antigua sintaxis para crear un NSArray
:
NSArray * instruments = [NSArray arrayWithObjects: @ "Ocarina", @ "Flute", @ "Harp", nil];
La nueva sintaxis literal de objeto para crear un NSArray
:
NSArray * instruments = @ [@ "Ocarina", @ "Flute", @ "Harp"];
Desafortunadamente, la sintaxis anterior no funcionará para declarar una NSMutableArray
, Pero hay un trabajo fácil alrededor. Acaba de pasar el copia mutable
mensaje al objeto recién formado:
NSMutableArray * instrumentsMutable = [@ [@ "Ocarina", @ "Flute", @ "Harp"] mutableCopy];
El método tradicional para crear un diccionario con Objective-C se parece a esto:
NSArray * keys = [NSArray arrayWithObjects: @ "Character", @ "Weapon", @ "Hitpoints", nil]; NSArray * objects = [NSArray arrayWithObjects: @ "Zelda", @ "Sword", [NSNumber numberWithInt: 50], nil]; NSDictionary * stats = [NSDictionary dictionaryWithObjects: objects forKeys: keys];
O, una alternativa ligeramente menos verbosa:
NSDictionary * stats = [NSDictionary dictionaryWithObjectsAndKeys: @ "Zelda", @ "Character", @ "Sword", @ "Weapon", [NSNumber numberWithInt: 50], @ "Hitpoints", nil];
Ambos de los anteriores son ejemplos principales de por qué Objective-C ha desarrollado una mala reputación por ser excesivamente detallado. ¡No más! Con los literales de objetos, el código anterior se puede reescribir de la siguiente manera:
NSDictionary * stats = @ @ "Personaje": @ "Zelda", @ "Arma": @ "Espada", @ "Puntos de golpe": @ 50;
Esto es mucho más fácil de entender y escribir..
Además de poder crear colecciones con literales de objetos, el último compilador de LLVM también ha introducido soporte para acceder a valores de matriz o diccionario con subíndices..
Por ejemplo, esta es la forma tradicional utilizada para acceder a un objeto desde una matriz o diccionario:
NSString * instrument = [instruments objectAtIndex: 0]; // Devuelve 'Ocarina' NSString * name = [stats objectForKey: @ "Character"]; // Devuelve 'Zelda'
Con la nueva capacidad de creación de subíndices, simplemente puede hacer esto:
NSString * instrumento = instrumentos [0]; // Devuelve 'Ocarina' NSString * name = stats [@ "Character"]; // Devuelve 'Zelda'
Mejor aún, los subíndices de colección no se limitan a seleccionar objetos. Si la colección es mutable, también puede reasignar valores:
instrumentsMutable [0] = @ "Ocarina of Time"; statsMutable [@ "Weapon"] = @ "Hammer";
Este es un gran paso adelante para los programadores de Objective-C, y creo que hará que el lenguaje sea más accesible para aquellos que hacen la transición desde otros lenguajes como Java o C ++ también..
El último tema que vale la pena mencionar en este tutorial es el concepto de "Expresiones en caja". Esencialmente, Objective-C ahora admite la conversión del resultado de una expresión de estilo C en un objeto Objective-C. La sintaxis básica para esto es así:
@ (2 * pi * r)
El resultado de lo anterior sería un NSNumber
objeto que contenía el producto de 2 veces el valor de pi por el valor de r. Por supuesto, podríamos asignar ese producto inmediatamente a una variable NSNumber:
NSNumber * diámetro = @ (2 * pi * r);
Esta técnica también funcionará con enumeraciones y cadenas:
// Boxed Expressions with Enums typedef enum Sword, Hammer, Shield, Arrow Weapons; NSNumber * currentWeapon = @ (Sword); // Devuelve 0 // Expresiones en caja con char * NSString * login = @ (getlogin ()); // Devuelve el nombre de inicio de sesión // Resultados NSLog (@ "Arma:% @ \ nInicio de sesión:% @", currentWeapon, login);
Este tutorial le proporcionó una descripción general rápida de los literales de objetos, una nueva técnica introducida con el compilador de Apple LLVM 4.0. Para obtener información más detallada sobre este tema, consulte la documentación oficial de LLVM..
Espero que hayan disfrutado leyendo este tutorial. No dude en dejar cualquier comentario que tenga en la sección de comentarios a continuación. También puedes conectarte conmigo en Twitter o Google Plus. Aclamaciones!