2011-12-23 11 views
8

En el estándar de codificación Delphi, ¿cuál es la regla para agregar un prefijo A antes del nombre del parámetro en funciones/procedimientos?¿Por qué ciertos parámetros tienen el prefijo "A" en Delphi?

Por ejemplo:

constructor Create(AOwner: TComponent); override; 
constructor CreateNew(AOwner: TComponent; Dummy: Integer = 0); virtual; 
procedure AddAncestor(Component: TComponent); //No A prefix, why? 

function FindClass(const ClassName: string): TPersistentClass; //No A prefix, why? 
function GetClass(const AClassName: string): TPersistentClass; 
procedure StartClassGroup(AClass: TPersistentClass); 
procedure GroupDescendentsWith(AClass, AClassGroup: TPersistentClass); 

Ton más ejemplos están en Delphi clases comunes (ver clases, formularios, etc.). De ahí mi pregunta: ¿cuál es la regla cuándo agregar y cuándo no?

+0

En mi código yo personalmente siempre agrego ** A ** para separar la entrada de los campos, como un hábito, pero quería saber el origen de esto. – Kromster

Respuesta

6

Normalmente se hace cuando habría un choque de nombres. Por ejemplo en el constructor TComponent imaginar si estaba escrito:

constructor TComponent.Create(Owner: TComponent) 

Ahora el parámetro Owner esconde la propiedad del propietario de la instancia. Para referirse a la propiedad, debe escribir Self.Owner.

Probablemente encontrará, en las fuentes de VCL, que el prefijo A se usa cuando existe tal conflicto y no se utiliza cuando no existe. Pero habrá inconsistencia en la aplicación de esta convención.

Esperaba que el Embarcadero Pascal style guide dijera algo al respecto, pero por desgracia, permanece en silencio.

Personalmente, nunca uso un prefijo A en el código que escribo. En mi experiencia, ocultar es invariablemente bueno porque a lo que normalmente te refieres es a los parámetros y no al miembro de la instancia. Si alguna vez necesita hacer referencia al miembro de la instancia, Self.Name puede desambiguar.

Por lo tanto, no hay ninguna regla, solo una convención determinada por preferencia personal. Haga su propia elección y apéguese a ella. La consistencia es mucho más importante que si opta por utilizar una convención de nomenclatura así.

+1

Generalmente cuando me encuentro con ese escenario en un constructor, solo asigno el campo de respaldo en lugar de la propiedad. –

+1

@Mason Eso es a menudo lo que sucede. Pero a veces quieres que el colocador se ejecute también. –

+0

Sin ofender a Serg, pero esta respuesta va en profundidad para explicar la fuente, no solo los significados literales. Aceptado. – Kromster

17

'A' es para 'Argumento'. Además, 'F' es para 'Campo', 'T' es para 'Tipo', 'E' es para 'Excepción', 'I' es para 'Interfaz'.

No hay regla cuando agregar el prefijo 'A' y cuando no.

+0

Has perdido L de tu lista –

+0

@David Heffernan por qué L – VibeeshanRC

+2

@vibeeshan código VCL moderno usa L como prefijo para las variables locales –

Cuestiones relacionadas