2011-12-07 25 views
23

actualmente estoy usando las siguientes convencionesmétodo Objective C convención de nomenclatura

- (id) initWithName:(NSString *) name; 

+ (NSString *) aliasForName:(NSString *) name 

- (void) method 

- (void) methodWithApple:(NSString *) apple andOrange:(NSString *) orange 
andMango:(NSString *) mango 

- (void) statusWasChanged:(id)sender 

¿Tiene un mejor estilo de los métodos anteriores?

Gracias

+1

Por 'initWithName' asegúrese de entender cómo ARC tratará esto (es decir, devolver un objeto retenido) – Thilo

+1

su convención de nombres es bueno .. –

Respuesta

52

Coding Guidelines for Cocoa es un gran recurso para responder cualquier pregunta de convención de nomenclatura. Mi respuesta está basada tanto como sea posible en esto.

método init

El método init se ve bien.

- (id) initWithName:(NSString *) name; 

Clase Método

El método de la clase se ve bien.

+ (NSString *) aliasForName:(NSString *) name 

Los métodos de clase también se pueden utilizar para crear instancias de una instancia de un objeto.En este caso, la API de Apple en general, tienen el comienzo método con el nombre de la clase como método UIButton 's buttonWithType: que tiene la firma:

+ (id)buttonWithType:(UIButtonType)buttonType 

Métodos de instancia

buen recurso para las convenciones de codificación para los métodos se pueden encontrado bajo General Rules.

El siguiente método debe caer los "and" s:

- (void) methodWithApple:(NSString *) apple andOrange:(NSString *) orange 
andMango:(NSString *) mango // BAD 

No utilice “y” vincular palabras clave que son atributos del receptor.

- (int)runModalForDirectory:(NSString *)path file:(NSString *) name types:(NSArray *)fileTypes;derecho

- (int)runModalForDirectory:(NSString *)path andFile:(NSString *)name andTypes:(NSArray *)fileTypes;mal

La firma debe parecerse más a lo siguiente:

- (void) methodWithApple:(NSString*)apple orange:(NSString*)orange 
mango:(NSString*)mango // GOOD 

Delegate Methods

Por último, creo que hay un par de mejoras que se podrían hacer en lo que parece ser un método delegado:

- (void) statusWasChanged:(id)sender // Not horrible, but not ideal 

primera mejora consiste en añadir el nombre de la clase con el método.

El nombre debe comenzar por la identificación de la clase del objeto que está enviando el mensaje :

- (BOOL)tableView:(NSTableView *)tableView shouldSelectRow:(int)row; 
- (BOOL)application:(NSApplication *)sender openFile:(NSString *)filename; 

segunda mejora es el uso de "DidChange" en lugar de "WasChanged".

Uso “sí” o “voluntad” de los métodos que se invocan para notificar al delegado que algo ha sucedido o está a punto de suceder.

- (void)browserDidScroll:(NSBrowser *)sender; 
- (NSUndoManager *)windowWillReturnUndoManager:(NSWindow *)window; 

tercera mejora es emitir fuertemente el parámetro remitente. No tengo documentación para apoyar esto, sin embargo, todos los ejemplos proporcionados en los ejemplos exudan este comportamiento. Observe el (NSBrowser*)sender y (NSWindow*)window en la muestra del código anterior tomada directamente de los documentos de apple.

Con esto en mente, el método delegado debería parecerse más a:

- (void) senderClassNameStatusDidChange:(SenderClassName*)sender // Good 

Si el remitente se opone a una persona que se vería así:

- (void) personStatusDidChange:(Person*)sender // Good 

Una palabra de advertencia es que se no siempre debe usar "did" en los métodos de delegado.

Aunque puede utilizar “hizo” o “voluntad” de los métodos que se invocan para piden el delegado de hacer algo en nombre de otro objeto, “debería” se prefiere .

- (BOOL)windowShouldClose:(id)sender; 
+3

+ 1 para la opinión basada en la documentación. :) –

+0

Como señala Rahul, la guía de Scott Stevenson sobre las convenciones del cacao es otro recurso útil a la hora de nombrar: http://cocoadevcentral.com/articles/000082.php –

1

Yo diría que el único que no estoy seguro es:

- (void) methodWithApple:(NSString *) apple andOrange:(NSString *) orange 
andMango:(NSString *) mango 

Parece que la "y" en los dos últimos argumentos es innecesario o debe sustituirse por un verbo. Creo que un buen nombre en realidad depende mucho del contexto de la llamada, y lo que se hará con los parámetros enviados en.

1
- (id) initWithName:(NSString *) name; 

cualquier método a partir de init se entiende por el marco como un método que devuelve un retenido objeto (diferencia entre initWithObjectsAndKeys y dictionaryWithObjectsAndKeys por ejemplo). Entonces, debe usar esta convención con eso en mente, especialmente cuando usa ARC.

+ (NSString *) aliasForName:(NSString *) name 

Utilizando la misma convención, este tipo de método podría devolver objetos autoreleased (métodos estáticos o no)

- (void) method 

Yo diría que si hay una sola palabra, y esta palabra es un sustantivo , debe ser el captador de una propiedad (como view, superview ...). De lo contrario, si es un verbo, ¿por qué no también agregar el objeto al que se refiere? Al igual que closeModalViewController

- (void) methodWithApple:(NSString *) apple andOrange:(NSString *) orange 
andMango:(NSString *) mango 

Me deje caer el and de hecho.

- (void) statusWasChanged:(id)sender 

Una forma más de Apple-y sería statusDidChange:

+0

1 Buena respuesta. Pensé lo mismo con 'statusWasChanged:' hasta que me di cuenta de que el método de delegado, que es lo que supongo es que le falta el nombre del remitente. Debería ser más como '- (void) senderNameStatusDidChange: (id) sender'. Entonces, si el emisor fuera una persona, sería como '- (void) personStatusDidChange: (Person *) person'. Los documentos sobre esto también emiten fuertemente al emisor. Consulte [Delegate Methods] [http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CodingGuidelines/Articles/NamingMethods.html#//apple_ref/doc/uid/20001282-1001803-BCIDAIJE] – Sam

0

Esas son buenas convenciones de nombres a excepción de la 'y'. Tiendo a mirar el Google Style Guide '.

Cuestiones relacionadas