2011-07-30 17 views
7

Duplicar posibles:
Prefixing property names with an underscore in Objective CObjective-C: usando _ (subrayado) en las variables de nombres

En Objective-C libro que estoy leyendo y en una parte del código que vi, a veces, las personas agregan guiones bajos a los nombres de las variables.

Mientras me di cuenta que esto es debido a una convención establecida, me pregunto:

¿Hay alguna importancia si subrayo precede o completa nombre de la variable? Por ejemplo, tome _name, name and name_ Como programador Objective-C, ¿qué significa "subrayado"?

+0

Esta pregunta podría ser de ayuda: http://stackoverflow.com/q/5466496/840973 –

Respuesta

17

Esto se debe en gran parte al estilo personal y a la programación defensiva. Pero esta es la razón principal por la que uso personalmente y he visto a gente usar el prefijo.

Tiene que ver con hacer su intento más claro acerca de si está accediendo directamente al ivar o utilizando el getter/setter.

Si tengo:

@property (nonatomic, retain) NSArray *people; 

y:

@synthesize people = _people; 

Esto compilará y producir las declaraciones de captador/definidor como este:

- (void)setPeople:(NSArray *)people; 
- (NSArray *)people; 

Ahora para acceder directamente al Ivar Necesito usar:

_people 

Para utilizar el captador/definidor puedo usar la notación de puntos o el captador/definidor como:

[self people]; 
// or 
self.people; // which compiles to [self people]; 

// and 
[self setPeople:newPeople]; 
// or 
self.people = newPeople; // which compiles to [self setPeople:newPeople]; 

Ahora en mi código si accidentalmente sólo tiene que escribir:

people = newPeople; // will not compile 

no lo hará compilar porque no estoy usando getter/setter y no hay ivar llamado people debe ser _people.

1

Underscore en realidad no significa nada, pero cuando los usa, es más difícil cometer errores como this one, pero nunca he visto a nadie usando guiones bajos al final, solo al principio y le aconsejaría que no agregue al final, ya que podría no estar claro lo que significan estas cosas.

Realmente no agrego guiones bajos a mi código Objective-C, pero es sobre todo una cuestión de gusto y no de significado. Solo asegúrese de no agregar caracteres de subrayado en el medio o al final de los nombres :)

+0

Estoy seguro de Apple utiliza para utilizar el sufijo subrayado en sus plantillas de datos básicos, pero parece que ahora han cambiado a un prefijo de un doble guión bajo –

+0

Está basado en el gusto, hay muchos tutoriales proporcionados por Apple que no los usan y no hay un comportamiento común en la comunidad. Pero, como señalé, usar el guión bajo podría hacer que tu código sea más seguro y evitar errores desagradables como el de la pregunta que señalé. –

+0

Lo siento, no estaba comentando sobre su respuesta, solo estaba señalando que lo había visto antes, pero incluso Apple lo ha abandonado en sus últimas plantillas, así que como usted dijo, el problema no es muy claro. –

1

subrayado significa privado, yo personal no lo uso mis propios ivars, ya que siempre puede usar @private y puede agregar ivar a la extensión de la interfaz en el archivo .m o incluso la sección @implementation de su código, se ha vuelto común recientemente con la aparición de propiedades, por lo que puede usarlo para protegerse del acceso accidental a un código en vez de la propiedad desde el compilador. puede decirle sobre el error, en la programación c usualmente usaré el puntaje inferior para mostrar que una función no es independiente, para ser utilizada por otra función y también la usaré en C++ desde ivar porque C++ no como un miembro funciones y ivars para tener el mismo nombre.

3

Si utiliza tales nombres de variable, definitivamente no debe usar ninguno que comience con un guión bajo seguido de una letra mayúscula. Los estándar de C se reserva todos estos identificadores para cualquier uso (§7.1.3):

Todos los identificadores que comienzan con un guión bajo y, o bien una letra mayúscula u otra subrayan siempre están reservados para cualquier uso.

es decir, una futura revisión del lenguaje C (o un compilador determinado) puede utilizar cualquier identificador como palabra clave o nombre de función de biblioteca, que puede romper su programa. A la luz de esto, prefiero simplemente no usar nombres prefijados por un guion bajo; es posible que sepas que no debes usar letras mayúsculas después del guión bajo, pero eso no impide que el nuevo tipo aparezca y lo haga.

Además, todos los identificadores que comienzan con un guión bajo se reservan en el alcance del archivo; otro tengo que tener cuidado con.

5

Un único subrayado inicial es una convención de codificación interna de Apple, y lo hacen para que sus símbolos no colisionen con los suyos. Desafortunadamente, Apple ha sido descuidado con la publicación de ejemplos de código que siguen este hábito, por lo que muchas personas ajenas a Apple han tenido la idea de que es algo bueno que hacer.

Si desea usar un prefijo en sus nombres de ivar y método, use cualquier cosa que no sea un solo guión bajo inicial.

Cuestiones relacionadas