2011-12-23 4 views
8

デルファイコーディング標準では、関数/プロシージャのパラメータ名の前にAの接頭辞を追加するルールは何ですか?例えばデルファイで特定のパラメータの先頭に「A」が付​​いているのはなぜですか?

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); 

トンより多くの例は、Delphi一般的なクラス(クラスなど、フォームを参照)です。したがって、私の質問 - いつ追加するのがいつですか?

+0

私のコードでは、私は個人的に常に** A **を追加してフィールド出力からの入力を習慣として分離していますが、このソースを知りたいと思っていました。 – Kromster

答えて

6

これは通常、名前の衝突が発生したときに実行されます。それが書かれている場合たとえば、TComponentのコンストラクタで想像:

constructor TComponent.Create(Owner: TComponent) 

今所有者パラメータは、インスタンスの所有者の財産を隠します。プロパティを参照するには、Self.Ownerを記述する必要があります。

VCLソースでは、このようなクラッシュがあるときにA接頭辞が使用され、そうでないときは使用されないことがあります。しかし、この条約の適用には矛盾が生じるでしょう。

私はむしろ、Embarcadero Pascal style guideが何かを言いたいと思っていましたが、残念ながらそれは黙っています。

個人的には、私が書いたコードにAプレフィックスを使用することはありません。私の経験では、あなたが一般的に参照したいのはインスタンスメンバーではなくパラメータであるため、隠蔽は常に成果です。インスタンスメンバーを参照する必要がある場合は、Self.Nameで曖昧さを解消できます。

したがって、ルールはありません。ただ個人的な好みによって決定されます。あなた自身の選択をして、それに固執する。このような命名規則を使用するかどうかは、一貫性がはるかに重要です。

+1

一般に、コンストラクタでそのシナリオを実行すると、プロパティの代わりにバッキングフィールドに割り当てます。 –

+1

@Masonそれはしばしば何が起こるかです。しかし、時々あなたはセッターも走らせたいと思っています。 –

+0

Sergに対する嫌悪はありませんが、この答えは、文字通りの意味だけでなく、その原因を説明するために深く掘り下げています。受け入れられました。 – Kromster

17

'A'は '引数'です。また、 'F'は 'Field'、 'T'は 'Type'、 'E'は 'Exception'、 'I'は 'Interface'です。

「A」プレフィックスを追加する場合と適用しない場合は、ルールはありません。

+0

あなたのリストからLを逃しました –

+0

@David HeffernanなぜL – VibeeshanRC

+2

@vibeeshan現代のVCLコードはLをローカル変数のプレフィックスとして使用します –

関連する問題