2011-12-23 9 views
8

Nello standard di codifica Delphi, qual è la regola per aggiungere un prefisso A prima del nome parametro nelle funzioni/procedure?Perché alcuni parametri sono preceduti da una "A" in Delphi?

Ad esempio:

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 altri esempi sono in Delphi classi comuni (vedere Classi, moduli, ecc). Da qui la mia domanda: qual è la regola quando aggiungere e quando no?

+0

Nel mio codice personalmente aggiungo sempre un ** A ** per separare l'input dai campi di output, come un'abitudine, ma volevo sapere la fonte di questo. – Kromster

risposta

6

In genere viene eseguito quando ci sarà uno scontro di nomi. Per esempio nel costruttore TComponent immaginate se è stato scritto:

constructor TComponent.Create(Owner: TComponent) 

Ora il parametro Proprietario nasconde la proprietà proprietario dell'istanza. Per fare riferimento alla proprietà dovresti scrivere Self.Owner.

Probabilmente, nelle fonti VCL, verrà utilizzato il prefisso A quando c'è uno scontro e non utilizzato quando non lo è. Ma ci sarà incoerenza nell'applicazione di questa convenzione.

Ho piuttosto sperato che l'Embarcadero Pascal style guide avrebbe detto qualcosa in merito, ma purtroppo rimane in silenzio.

Personalmente non uso mai un prefisso A nel codice che scrivo. Nella mia esperienza, nascondersi è invariabilmente soddisfacente perché quello che in genere si vuole fare riferimento è il parametro piuttosto che il membro dell'istanza. Se hai mai bisogno di fare riferimento al membro dell'istanza, allora Self.Name può disambiguare.

Quindi, non c'è una regola, solo una convenzione determinata dalle preferenze personali. Fai la tua scelta e attenersi ad essa. La coerenza è molto più importante del fatto che tu scelga o meno di utilizzare una tale convenzione di denominazione.

+1

Generalmente quando corro in quello scenario in un costruttore, assegno semplicemente al campo di supporto invece della proprietà. –

+1

@Mason Questo è spesso ciò che accade. Ma a volte vuoi che anche il setter scappi. –

+0

Senza offesa per Serg, ma questa risposta va in profondità per spiegare la fonte, non solo i significati letterali. Accettato. – Kromster

17

'A' è per 'Argomento'. Inoltre, 'F' è per 'Campo', 'T' è per 'Tipo', 'E' è per 'Eccezione', 'I' è per 'Interfaccia'.

Non esiste una regola quando aggiungere il prefisso "A" e quando no.

+0

Hai perso L dall'elenco –

+0

@David Heffernan perché L – VibeeshanRC

+2

@vibeeshan codice VCL moderno utilizza L come prefisso per le variabili locali –

Problemi correlati