objective-c - tipos - versiones de objective c
¿Qué se prefiere en la notación de puntos de Objective-c o la notación de corchete? (3)
Estoy leyendo un libro - Programación iOS Big Nerd Ranch. Dice que la notación de puntos no se recomienda ya que confunde el código. Estoy viendo simultáneamente un curso de Stanford para la programación de iOS y en él está usando la notación de puntos extensamente allí. ¿Qué recomendarías? Personalmente me inclino más a la notación del soporte.
¿Podría explicar cómo convertir este código a notación de corchete?
self.display.text = [self.display.text stringByAppendingString:digit];
Como entiendo debería ser:
[[self display] setText]:[[[self display] text] stringByAppendingString:digit];
¿Es correcto?
Aquí está mi opinión:
Siempre debe utilizar la notación de puntos siempre que trate con propiedades. No solo es más rápido de escribir (self.foo tiene menos caracteres que [short foo]) sino que, lo que es más importante, hace que los mensajes encadenados sean más fáciles de entender. Por ejemplo:
self.myTextField.text.length
es más fácil de entender que
[[[self myTextField] text] length]
Además, hace que sea menos probable que ensucie la puntuación (asegurarse de que tenga el número correcto de paréntesis es a menudo un dolor).
Pero, como otras personas han dicho anteriormente, en última instancia es una opinión personal.
Esta es una cuestión de elección personal. Hay quienes argumentan que la notación de puntos hace que no esté claro si se están enviando mensajes (se están invocando métodos) ya que se parece al acceso al elemento de la estructura de estilo C. El otro lado del argumento es que la notación de puntos es más fácil de escribir, más fácil de leer y más concisa.
Como alguien que ha estado escribiendo Objective-C desde antes de la introducción de la notación de puntos (en Objective-C 2.0), puedo entender los argumentos de ambos lados, pero prefiero usar la notación de puntos por mí mismo. Dicho esto, creo que es importante que las personas que comienzan con Objective-C entiendan que la sintaxis de notación de puntos se convierte en llamadas de métodos de acceso estándar cuando se compilan. Creo que los autores del libro Big Nerd Ranch probablemente tengan una actitud similar, y esa es una gran parte de la razón por la que decidieron usar la notación de corchetes en el libro.
En resumen, haz lo que más te guste. Ambos son válidos, y la elección entre los dos es esencialmente una cuestión de estilo. Independientemente de lo que elija, asegúrese de comprender que ambos estilos producen un código compilado equivalente.
EDITAR: Olvidé responder la pregunta sobre la conversión de la notación de puntos a la sintaxis de corchete. Estás cerca, pero lo que has escrito está mal y no se compilará realmente. Debería ser: [[self display] setText:[[[self display] text] stringByAppendingString:digit]]
. Si lo estuviera escribiendo, lo dividiría en dos líneas (bueno, realmente usaría la notación de puntos):
NSString *stringWithDigit = [[[self display] text] stringByAppendingString:digit];
[[self display] setText:stringWithDigit];
EDIT 2: Han pasado más de 3 años desde que escribí esta respuesta. Solo quería señalar que en estos días, muchas más clases de framework de Apple han tenido cosas que anteriormente eran métodos regulares convertidos a @properties (por ejemplo -[NSArray count]
) presumiblemente para una mejor interoperabilidad de Swift. Esto me ha llevado a usar la notación de puntos de forma aún más generosa que antes.
Sé que este es un post antiguo, pero me gustaría agregar una respuesta más moderna.
Con el lanzamiento de Swift y la inminente desaparición de nuestro lenguaje favorito, la preferencia debería inclinarse hacia la notación de puntos. Todos los marcos de iOS han actualizado su API para favorecer la notación de puntos (prefiriendo las propiedades de solo lectura en un encabezado a los getters). Esto hace que la eventual traducción hacia veloz sea más fluida.
Para que quede claro, prefiera las propiedades para las instancias en las que está exponiendo captadores y / o definidores. Afortunadamente, la moderna herramienta de migración de objetivos de Xcode hará la mayor parte de esto por usted.